javascript settimeout 现在和以后评估变量
javascript settimeout evaluate variables now versus later
function myFunction() {
var now = 3;
var later = 3;
setTimeout(function(){ alert(now * later); }, 1000);
now++;
later++;
}
上面的代码会提示值“16”,因为执行时两个变量都是4。
有没有办法让“现在”的值立即以其当前值进行评估,以便最终结果为 12?
您可以将 now
作为参数传递给函数,在调用 setTimeout
时:
var now = 3;
var later = 3;
setTimeout(function(now) {
alert(now * later);
}, 1000, now);
now++;
later++;
或者在 setTimeout
调用时声明另一个赋值给 now
的变量:
var now = 3;
var later = 3;
const nowAtTimeoutCall = now;
setTimeout(function() {
alert(nowAtTimeoutCall * later);
}, 1000);
now++;
later++;
function myFunction() {
var now = 3;
var later = 3;
setTimeout(function(){ alert(now * later); }, 1000);
now++;
later++;
}
上面的代码会提示值“16”,因为执行时两个变量都是4。 有没有办法让“现在”的值立即以其当前值进行评估,以便最终结果为 12?
您可以将 now
作为参数传递给函数,在调用 setTimeout
时:
var now = 3;
var later = 3;
setTimeout(function(now) {
alert(now * later);
}, 1000, now);
now++;
later++;
或者在 setTimeout
调用时声明另一个赋值给 now
的变量:
var now = 3;
var later = 3;
const nowAtTimeoutCall = now;
setTimeout(function() {
alert(nowAtTimeoutCall * later);
}, 1000);
now++;
later++;