今天看let关键字时,去查了下var的提升会导致的问题,发现了一个很有趣的例子
在函数作用域或全局作用域中通过var声明的变量,无论实际上在哪里声明的,都会被当成在当前作用域顶部声明的变量,这就是是我们常说的提升(Hoisting)机制
var v = 1;
(function() {
console.log(v); // undefined
var v = 12
})();
上述代码的执行结果为undefined,原因是块级作用域中的v变量的提升,等价于如下代码:
var v = 1;
(function() {
var v;
console.log(v); // undefined
v = 12
})();
可以看出v编译在块级作用域中提升到最前面了,所以才导致输出undefined。
顺便一说,let声明的变量不会与全局作用域挂钩