我想将一个全局参数传递给setTimeout
中的函数,但我希望该值在解释setTimeout
时保持不变:
var a=0;
setTimeout(function(){
console.log(a);
},5000,a)
a=1;
//output is 1 and should be 0
我该如何解决这个问题?我已经搜索了Stack Overflow的答案,但没有找到任何答案。
答案 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;