首页 > 解决方案 > 将变量传递给 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()?

标签: javascriptasynchronoussettimeout

解决方案


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

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


推荐阅读