我有一个全局变量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
声明变量。由于你没有声明它,你只有赋值表达式,在表达式求值时隐式创建全局变量。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
i +=1
先执行,因此 ReferenceError 在有机会之前出现。如果使用var
正式声明i
变量,则该声明将被提升到函数(或全局环境)的顶部,即使该声明在i += 1
之后,也不会出现错误。 - I Hate Lazyi += 1
,但假设声明会被提升以防止错误。他本来是正确的,但是没有正式声明,就没有提升。 - I Hate Lazy