我是异步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)
答案 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。