如何将更改参数传递给setTimeout?

时间:2015-09-11 11:31:37

标签: javascript settimeout

我想将一个全局参数传递给setTimeout中的函数,但我希望该值在解释setTimeout时保持不变:

var a=0;

setTimeout(function(){
	console.log(a);
},5000,a)

a=1;

//output is 1 and should be 0

我该如何解决这个问题?我已经搜索了Stack Overflow的答案,但没有找到任何答案。

4 个答案:

答案 0 :(得分:10)

那是因为你实际上仍在使用外部变量。只需将参数添加到函数中:

setTimeout(function (a) {
    console.log(a);
}, 5000, a);

答案 1 :(得分:0)

  var a = 0;

    setTimeout(function(c) {
      console.log(c);
    }, 5000, a);

    a = 1;

答案 2 :(得分:0)

您可以使用闭包方法执行与先前答案相同的操作:

new Date().valueOf()

答案 3 :(得分:0)

这里的问题是在setTimeout函数中,变量被引用到外部作用域的变量引用。因此,您需要为setTimeout函数创建不同的范围,如下所示:

        var a = 0;

        setTimeout((function(a) {
            return function() {
                console.log(a, arguments);
            }
        })(a), 5000)

        a = 1;