变量提升
- 变量提升只发生在当前作用域(例如:开始加载页面的时候只对全局作用域下的变量进行提升,因为此时函数中存储的都是字符串),栈内存形成之后,代码执行之前。
- 在全局作用域下声明的函数或者变量是“全局变量”,在私有作用域下声明的变量是“私有变量”。
- 当代码执行遇到创建函数这部分代码后,会直接跳过,因为在提升阶段就已经完成函数的赋值操作。
函数执行前先生成私有作用域,私有作用域形成之后,先进行变量提升(变量提升前,先形参赋值)。
console.log(a);//=>undefined
console.log(window.a);//=>undefined
console.log('a' in window); //=>TRUE 在变量提升阶段,在全局作用域中声明了一个变量A,此时就已经把A当做属性赋值给WINDOW了,只不过此时还没有给A赋值,默认值UNDEFINED in:检测某个属性是否隶属于这个对象
var a = 12;//=>全局变量值修改,WIN的属性值也跟着修改
console.log(a);//=>全局变量A 12
console.log(window.a);//=>WINDOW的一个属性名A 12
a = 13;
console.log(window.a);//=>13
window.a = 14;
console.log(a)