我有一个i
递增的全局变量(请参见此处的小提琴):
(function increment() {
i += 1;
})();
i = 0;
在 Chrome 中,我收到错误消息Uncaught ReferenceError: i is not defined
。
变量不应该i
在这里托管,以便在函数内部increment
,变量i
定义为undefined
?
我有一个i
递增的全局变量(请参见此处的小提琴):
(function increment() {
i += 1;
})();
i = 0;
在 Chrome 中,我收到错误消息Uncaught ReferenceError: i is not defined
。
变量不应该i
在这里托管,以便在函数内部increment
,变量i
定义为undefined
?
变量声明语句被提升。你没有声明。
声明语句用于var
声明变量。由于您尚未声明它,您所拥有的只是赋值表达式,它在表达式评估时隐式创建全局变量。
换句话说,没有正式声明意味着没有吊装。
现在假设您确实正式声明了它,允许提升变量声明。IIFE 内部的操作会产生NaN
,但会被后面的 赋值覆盖0
。
这是因为只提升了声明,而不是赋值。
// The 'var i' part below is actually happening up here.
(function increment() {
i += 1; // "i" is declared, but not assigned. Result is NaN
})();
var i = 0; // declaration was hoisted, but the assignment still happens here
console.log(i); // 0