如果我这样做:
var a = 0;
(function () {
var a = a; //want to make local a = global a
++a;
console.log("fn",a);
})();
console.log(a);
输出是:
fn NaN
0
为什么自执行函数中的a
会变成NaN
?
我知道这样做会很好:
(function () {
var b = a;
++b;
console.log("fn",b); // fn 1
})();
但如果我按照第一个版本的方式进行操作,它就会出现 NaN
问题。
为什么会这样?
最佳答案
var a = a;
其实就是var a; a = a;
由于变量提升。这意味着在赋值时,旧的 a
已经被新的(undefined
)隐藏了。
避免此类问题的最简单方法是将值作为参数传递:
(function (a) {
++a;
console.log("fn",a);
})(a);
如果 a
是一个全局变量,您还可以使用 var a = window.a;
,例如 woz suggested - 但由于拥有全局变量通常不是一个好主意,所以最好保留参数。
关于javascript - 本地 Javascript 范围问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457299/