发表于: 2017-02-22 01:39:16
1 1246
今天完成的事情:
1.上午参加了海川项目启动会
2.看了下变量对象,变量提升
明天计划的事情:
开始做海川前端方案
遇到的问题:
作用域链看不是很懂,理解了一点闭包
收获:
js声明的函数和变量是如何解析的:
当调用一个函数,一个新的执行上下文就被创建,一个执行上下文的生命周期可分为两个阶段
1.创建阶段:这个阶段执行上下文会分别创建变量对象,建立作用域链,以及确定this的指向
2.代码执行阶段:这个阶段开始执行代码,完成变量赋值,函数引用,以及执行其他代码。
变量对象(Variable Object)的创建经历了一下几个过程:
1.建立argument对象,检查当前上下文的参数,建立该对象下的属性与属性值
2.检查当前上下文的函数声明,也就是使用function关键字声明的函数。在变量对象中以函数名建立一个属性,属性值为指向该函数所在内存地址的引用。如果函数名的属性已存在,那么该属性会被新的引用所覆盖。
3.检查当前上下文中的变量声明,每找到一个变量声明,就在变量对象中以变量名建立一个属性,属性值位undefine。如果该变量名属性已存在,为了防止同名的函数被修改为undefine,则会直接跳过,原属性值不会被修改。
变量提升:function声明比var声明优先级高一点
未进入执行阶段之前,变量对象中的属性不能访问,但是进入执行阶段之后,变量对象转换为活动对象,里面的属性就能被访问了,然后就开始进行执行阶段的操作。
变量对象与活动对象的区别:其实他们是同一对象,只是出于执行上下文的不同阶段。
评论