我是 JavaScript 的初学者,我已经尝试解决这个问题至少两个小时。如果有人可以向我解释为什么会这样,那就太好了!
function slowDouble(x, callback) {
setTimeout(function() {
callback(2 * x);
}, 500);
}
function slowDoubleTenTimes(x, callback) {
for (i = 0; i < 10; i++) {
slowDouble(x, function(result) {
x = result;
});
}
callback(x);
}
slowDoubleTenTimes(3, function(result){
console.log('The result of slowDoubleTenTimes is ' + result);
});
逻辑告诉我 in slowDoubleTenTimes
,在 for 循环中,x
应该改变。并且每次slowDouble
在后续的for循环迭代中再次调用,
x
都应该不同。但x
仍然在3
!事实上,得到的答案callback(x)
应该是3072
。然而,x
从3
变为6
,然后保持在6
。
JavaScript 有什么我不知道的东西会阻止结果发生变化吗?
另外,奇怪的是,如果我放在for 循环之后,控制台会在运行console.log("hi")
前打印出“hi” 。slowDouble
之前不应该slowDouble
跑console.log("hi")
吗?或者有什么setTimeout
我没有正确理解的地方?
谢谢!