Please ignore the fact that this code achieves nothing and apologies for what's probably an inane question!
I understand that I cannot pass a function call into setTimeout()
as the first argument, but why can I not do that?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer(name), 1000);
Result:
Andy
timers.js:327
throw new TypeError('"callback" argument must be a function');
^
I can solve the problem by instead using a reference to printer
and using bind()
to send name
along with it, but why must I take these extra steps?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer.bind(null, name), 1000));
Result:
Andy
Ross
David
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…