如何将更改参数传递给 setTimeout?
How to pass changing parameter to setTimeout?
我想将全局参数传递给 setTimeout
中的函数,但我希望在解释 setTimeout
时该值保持在:
var a=0;
setTimeout(function(){
console.log(a);
},5000,a)
a=1;
//output is 1 and should be 0
我该如何解决这个问题?我已经在 Stack Overflow 中搜索了答案,但没有找到任何答案。
那是因为你实际上还在使用外部变量。只需将参数添加到函数中:
setTimeout(function (a) {
console.log(a);
}, 5000, a);
var a = 0;
setTimeout(function(c) {
console.log(c);
}, 5000, a);
a = 1;
您可以使用闭包方法来完成与之前答案相同的操作:
var a=0;
function func(b){
var c = b;
this.display = function(){
console.log(c);
}
}
var functionDisplay = new func(a);
setTimeout(function(){
functionDisplay.display();
},5000)
a=1;
这里的问题是,在您的 setTimeout 函数中,变量正在引用外部作用域的变量引用。因此,您需要为 setTimeout 函数创建一个不同的范围,如下所示:
var a = 0;
setTimeout((function(a) {
return function() {
console.log(a, arguments);
}
})(a), 5000)
a = 1;
我想将全局参数传递给 setTimeout
中的函数,但我希望在解释 setTimeout
时该值保持在:
var a=0;
setTimeout(function(){
console.log(a);
},5000,a)
a=1;
//output is 1 and should be 0
我该如何解决这个问题?我已经在 Stack Overflow 中搜索了答案,但没有找到任何答案。
那是因为你实际上还在使用外部变量。只需将参数添加到函数中:
setTimeout(function (a) {
console.log(a);
}, 5000, a);
var a = 0;
setTimeout(function(c) {
console.log(c);
}, 5000, a);
a = 1;
您可以使用闭包方法来完成与之前答案相同的操作:
var a=0;
function func(b){
var c = b;
this.display = function(){
console.log(c);
}
}
var functionDisplay = new func(a);
setTimeout(function(){
functionDisplay.display();
},5000)
a=1;
这里的问题是,在您的 setTimeout 函数中,变量正在引用外部作用域的变量引用。因此,您需要为 setTimeout 函数创建一个不同的范围,如下所示:
var a = 0;
setTimeout((function(a) {
return function() {
console.log(a, arguments);
}
})(a), 5000)
a = 1;