【发布时间】:2010-08-02 22:58:54
【问题描述】:
我最近在工作中遇到了一个问题,至少根据我对 JavaScript 的了解,我得到了一个不可能的结果。我希望有人能解释这里发生了什么以及为什么实际结果与我的预期结果不同。
控制台中的预期结果
id: a , x: 1
id: b , x: 1
id: c , x: 1
控制台中的实际结果
id: c , x: 1
id: c , x: 2
id: c , x: 3
代码
function MyClass(id)
{
var x = 0;
return function()
{
return function()
{
x += 1;
console.log("id: ", id, ", x: ", x);
}
}
}
function DoStuff(id)
{
var q = MyClass(id);
response_callback = q();
setTimeout(function(){ response_callback(); }, 50);
}
DoStuff("a");
DoStuff("b");
DoStuff("c");
【问题讨论】:
-
setTimeout(function(){ response_callback(); }, 50);可以替换为setTimeout(response_callback, 50) -
@Dan,嗯,它可以,但是即使没有
var,你也不会遇到狡猾的错误... -
@Matthew:这听起来像是要获取狡猾的错误。 ;)
-
+1 个写得很好的问题,有趣地揭示了一个容易错过的错误。
标签: javascript asynchronous scope