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

Javascript 如何将更改参数传递给setTimeout?,javascript,settimeout,Javascript,Settimeout,我希望在setTimeout中向函数传递一个全局参数,但我希望在解释setTimeout时该值保持不变: var a=0; setTimeoutfunction{ console.loga; },5000,a a=1; //输出是1,应该是0,这是因为您仍然实际使用外部变量。只需将参数添加到函数中: setTimeout(function (a) { console.log(a); }, 5000, a); 您可以使用闭包方法执行与前面答案相同的操作: var a=0; functi

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

var a=0; setTimeoutfunction{ console.loga; },5000,a a=1;
//输出是1,应该是0,这是因为您仍然实际使用外部变量。只需将参数添加到函数中:

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

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

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;
        var a = 0;

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

        a = 1;