我遇到了这个错误,并没有在任何地方找到一个例子。在此记录以供参考。
问题在于,在下面的示例中调用o.callback()
时,x
的值会在定义和执行回调之间发生变化。
p = {
f: function () { x = 'p.f() local'; }
};
o = {
f: function () {
x = 'o.f() local';
this.callback = function () { console.log(x); };
}
};
o.f();
p.f();
o.callback.apply();
这里的输出是:
p.f() local
虽然我期待:
o.f() local
更新 这是一个jsfiddle:http://jsfiddle.net/elplatt/kzS5A/1/
答案 0 :(得分:1)
变量“x”是全局,因为它未使用var
显式声明。因此,所有这些函数都引用相同的“x”。
JavaScript中的对象属性必须始终显式引用。也就是说,与C ++或Java等语言不同,JavaScript不提供对“成员变量”的隐式引用。如果您想在这些对象上使用属性“x”,则必须将其称为this.x
。
答案 1 :(得分:0)
通过使用var
定义x
var x = 'o.f() local'
x
和o.f
中的p.f
位于全局范围内,因为它从未使用var
声明。