setTimeout给了我新的变量,而不是旧的

setTimeout giving me the new variable not the old

本文关键字:变量 setTimeout      更新时间:2023-09-26

所以我正在制作一个必须延迟的函数,我需要旧的值,而不是新的

test='old';
setTimeout( function(test) {alert(test)}, 1000,[test]);
test='new';

一个不依赖于setTimeout向回调传递参数的能力的通用解决方案是使用IIFE创建一个新的作用域并捕获变量的当前值:

test='old';
(function(test) {
    setTimeout(function() {
        alert(test)
    }, 1000);
}(test));
test='new';

这适用于任何类型的回调。另请参阅循环中的JavaScript闭包——一个简单的实用示例。