将变量传递给setTimeout()

时间:2020-07-23 06:15:58

标签: javascript asynchronous settimeout

我是异步javascript的新手。 我意识到代码A与代码B相同。

代码A:

const name = ['a','b','c'];
setTimeout(()=>{
   console.log(name);
},1500)

代码B:

const name = ['a','b','c'];
setTimeout(list=>{
   console.log(list);
},1500,name)
  1. 我们应该使用代码A还是代码B,这在异步方面会更好?
  2. 如果我们可以直接在setTimeout()中使用在setTimeout()外部声明的变量,为什么要将它们作为第三或第四等参数传递给setTimeout()?

2 个答案:

答案 0 :(得分:1)

您可能要传入参数的原因是,它们与创建超时时的值一起传递。例如,考虑以下示例:

const name = ['a','b','c'];

let i = 0;
while (i < name.length) {
    setTimeout(function(letter1) {
        console.log({letter1});
    }, i * 100, name[i]);
    
    setTimeout(function() {
        console.log({letter2: name[i], i});
    }, i * 1000);
    i++;
}

在不传入参数的情况下,到setTimeout函数运行时,i已经为3,因此每undefined可获得console.log

答案 1 :(得分:0)

您应该使用代码B, 只是要添加解释

(function () {
    const name = ['a','b','c'];
const name2 = [1,2,3];

    setTimeout((test)=>{
       console.log(test, name2); // here I am printing test, which is passed as arguments.
    },1500, name);
})();

因此要在setTimeout中访问它,您必须在函数定义中添加参数,否则将从其父作用域读取相似的名称,例如本例中的name2。

相关问题