隐式全局变量,var a=1,b=1;与var a=b=1;的区别
var a=1,b=1;与var a=b=1; 在工作中第一种写法比较常见,但是我们偶尔也图方便用到第二种写法,以前以为他们表达的语义是一样的,实际操作中发现不太一样,上例子说明: 1 console.log(a, b); 2 var a = 1, b = 1; 3 function fn() { 4 console.log(a, b); 5 var a = b = 2; 6 console.log(a, b); 7 } 8 fn(); 9 console.log(a, b); 看到上面一段代码,有一点开发经验的可能会脱口而出,从上至下: 很明显,既然这样问了,这个答案就不准确 变量提升: 当栈内存(作用域)形成,JS代码自上而下执行之前,浏览器首先会把所有带 var/function 关键词的进行提前 声明 或者 定义 ,这种预先处理机制称之为 变量提升 声明: var a (此时a=undefined) 定义: a=2(没有声明,所以放在哪里都是全局变量) var: 只声明未定义 funtion: 声明和赋值都完成了 变量提升 只发生在当前作用域,开始加载页面的时候 全局作用域是当前作用域 ,所以只会对全局作用域下的进行提升,因为变量提升是 发生在当前作用域 ,因为此时函数是私有作用域,没有任何提升行为,函数中的代码只是存储的字符串而已 在全局作用域下声明(var