2015-09-11 29 views
0

我想传递给函数全局参数在setTimeout,但我想要的值留在setTimeout被解释为:如何将更改参数传递给setTimeout?

var a=0; 
 

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

 
a=1; 
 

 
//output is 1 and should be 0

我该如何解决这个问题?我已经搜索堆栈溢出的答案,但没有找到任何东西。

回答

10

这是因为您仍然在使用外部变量。就在参数添加到函数:

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

它的工作!非常感谢你 – lopata

0
var a = 0; 

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

    a = 1; 
0

您可以使用封闭的方法做同样的比以前的答案:

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; 
0

这里的问题是,你的setTimeout函数里面的变量被引用到外部作用域的变量引用。所以你需要为你的setTimeout函数创建一个不同的范围如下:

 var a = 0; 

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

     a = 1; 
相关问题