【发布时间】:2018-12-11 14:54:30
【问题描述】:
我有以下 js 代码。
var a = (function(){
var x = 0;
var y = function(){
x++;
console.log(x);
}
var z = function(){
return x;
}
return {
x, y, z
}
})();
在这里,当我第一次尝试访问 a.x 时,它给了我输出 0(预期 x 初始化为 0),然后我使用函数 @ 递增 x 的值987654325@。但是在将x 的值增加两次(或者可能超过2)之后,当我尝试访问x 的值时,它仍然给了我a.x=0。我无法理解为什么会这样,因为我已经使用函数 y 更改了 x 的值。那为什么它没有改变。
(但是当我通过某个函数访问 x 的值时,它会给出递增的值。为什么会有这种不同的行为。如果我直接访问同一个变量,那么它将给出一些输出,当我返回相同的变量值时它赋予了一些其他价值。为什么?)
var a = (function(){
var x = 0;
var y = function(){
x++;
console.log(x);
}
var z = function(){
return x;
}
return {
x, y, z
}
})();
console.log(a.x);
a.y();
a.y();
console.log(a.x);
console.log(a.z());
我猜是因为关闭但不确定。
【问题讨论】:
-
因为 a.x 只会是它最初设置的值。它不是对变量的引用。
-
但我正在使用
y更改它的值,那么它应该会更改,但为什么不更改? -
y 是一个函数……你不是在改变一个函数,而是在执行它。如果变量在我们引用它们之后发生了变化,我们的应用程序就会出现大问题。
-
谢谢,得到答案。
标签: javascript iife