我试图了解 JavaScript 中的提升和作用域,并试图弄清楚这段代码中到底发生了什么。console.log(outside)
并且console.log(local)
两者都记录未定义,正如我所料,outside
声明但未初始化,并且声明local
被提升到函数的顶部。但是为什么typeof global
等于'undefined'
。在函数内部省略var
与在全局范围内声明变量不同 - 在这种情况下它不会被提升吗?
var outside;
(function() {
i = 2;
if (i == 1) {
var local = 'local';
global = 'global';
}
// Demonstrates that local variables are hoisted but global variables are not.
console.log(outside); // undefined
console.log(local); // undefined
console.log(global); // Uncaught ReferenceError: global is not defined. (i.e. typeof global === 'undefined')
})();