关于js中的变量提升的要点
变量对象的创建,经历了一下三个过程:
- 建立arguments对象。检查当前上下文中的参数,建立该对象下的属性和属性值
- 检查当前上下文的函数声明,即用function关键字声明。在变量对象中以函数名建立属性,属性值指向改函数所以在内存地址的引用。
- 检查当前上下文的变量声明,在变量对象中以变量名建立属性,属性值为undefined(如果该变量名的属性已经存在,则跳过,原属性值不会被修改)
例子:12345678function test() { console.log(a); console.log(foo()); var a = 1; function foo() { return 2; }}
经过变量提升,上面的例子实际变成了:123456789function test() { function foo() { return 2; } var a; console.log(a); console.log(foo()); a = 1;}