Por que não posso passar uma chamada de função (em vez de uma referência de função ou uma função anônima) para setTimeout ()?
Por favor, ignore o fato de que este código não alcança nada e peça desculpas pelo que provavelmente é uma pergunta insana!
Entendo que não posso passar uma chamada de função parasetTimeout()
como o primeiro argumento, masporque não posso fazer isso?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer(name), 1000);
Resultado:
Andy
timers.js:327
throw new TypeError('"callback" argument must be a function');
^
Eu posso resolver o problema usando uma referência paraprinter
e usandobind()
enviarname
junto com ele, mas por que devo seguir essas etapas extras?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer.bind(null, name), 1000));
Resultado:
Andy
Ross
David