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++;