4

我有一个i递增的全局变量(请参见此处的小提琴):

(function increment() {
   i += 1;   
})();

i = 0;

​在 Chrome 中,我收到错误消息Uncaught ReferenceError: i is not defined

变量不应该i在这里托管,以便在函数内部increment,变量i定义为undefined

4

1 回答 1

7

变量声明语句被提升。你没有声明。

声明语句用于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
于 2012-10-11T16:30:48.603 回答