【发布时间】:2017-04-10 07:29:56
【问题描述】:
请忽略此代码一无所获的事实,并为可能是一个愚蠢的问题道歉!
我知道我不能将函数调用作为第一个参数传递给setTimeout(),但是为什么我不能这样做?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer(name), 1000);
结果:
Andy
timers.js:327
throw new TypeError('"callback" argument must be a function');
^
我可以通过使用对printer 的引用并使用bind() 将name 连同它一起发送来解决问题,但是为什么我必须采取这些额外的步骤?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer.bind(null, name), 1000));
结果:
Andy
Ross
David
【问题讨论】:
-
因为 setTimeout 应该收到一个稍后应该调用的回调
标签: javascript functional-programming