发表于: 2017-02-22 01:39:16

1 1247


今天完成的事情:

      1.上午参加了海川项目启动会

      2.看了下变量对象,变量提升

明天计划的事情:

      开始做海川前端方案

遇到的问题:  

     作用域链看不是很懂,理解了一点闭包

收获:

    js声明的函数和变量是如何解析的:

    当调用一个函数,一个新的执行上下文就被创建,一个执行上下文的生命周期可分为两个阶段

    1.创建阶段:这个阶段执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向

    2.代码执行阶段:这个阶段开始执行代码,完成变量赋值,函数引用,以及执行其他代码。

    变量对象(Variable Object)的创建经历了一下几个过程:

    1.建立argument对象,检查当前上下文的参数,建立该对象下的属性与属性值

    2.检查当前上下文的函数声明,也就是使用function关键字声明的函数。在变量对象中以函数名建立一个属性,属性值为指向该函数所在内存地址的引用。如果函数名的属性已存在,那么该属性会被新的引用所覆盖。

    3.检查当前上下文中的变量声明,每找到一个变量声明,就在变量对象中以变量名建立一个属性,属性值位undefine。如果该变量名属性已存在,为了防止同名的函数被修改为undefine,则会直接跳过,原属性值不会被修改。

    变量提升:function声明比var声明优先级高一点

    未进入执行阶段之前,变量对象中的属性不能访问,但是进入执行阶段之后,变量对象转换为活动对象,里面的属性就能被访问了,然后就开始进行执行阶段的操作。

    变量对象与活动对象的区别:其实他们是同一对象,只是出于执行上下文的不同阶段。



返回列表 返回列表
评论

    分享到