今天看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声明的变量不会与全局作用域挂钩

 

分类: 编程