请忽略这样的事实,即这段代码什么都不做,并且对可能是一个疯狂的问题表示歉意!为什么我不能将函数调用(而不是函数引用或匿名函数)传递给setTimeout()?
据我所知,我不能通过函数调用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应该会收到一个应该稍后调用的回调 –