Недавно я столкнулся с проблемой на работе, в которой, по крайней мере, исходя из моих знаний 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");