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

时间:2013-08-04 21:29:20

标签: javascript settimeout

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

test='old';

setTimeout( function(test) {alert(test)}, 1000,[test]);

test='new';

1 个答案:

答案 0 :(得分:2)

不依赖于setTimeout将参数传递给回调的能力的一般解决方案(在MDN documentation中解释的在IE中不起作用),是使用{{3创建一个新的范围并捕获变量的当前值:

test='old';

(function(test) {
    setTimeout(function() {
        alert(test)
    }, 1000);
}(test));

test='new';

这适用于任何类型的回调。另请参阅IIFE