我想传递给函数全局参数在setTimeout
,但我想要的值留在setTimeout
被解释为:如何将更改参数传递给setTimeout?
var a=0;
setTimeout(function(){
\t console.log(a);
},5000,a)
a=1;
//output is 1 and should be 0
我该如何解决这个问题?我已经搜索堆栈溢出的答案,但没有找到任何东西。
我想传递给函数全局参数在setTimeout
,但我想要的值留在setTimeout
被解释为:如何将更改参数传递给setTimeout?
var a=0;
setTimeout(function(){
\t console.log(a);
},5000,a)
a=1;
//output is 1 and should be 0
我该如何解决这个问题?我已经搜索堆栈溢出的答案,但没有找到任何东西。
这是因为您仍然在使用外部变量。就在参数添加到函数:
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;
它的工作!非常感谢你 – lopata