обратные вызовы содержат ссылку на функцию.
уйста, игнорируйте тот факт, что этот код ничего не дает и приносит извинения за то, что, вероятно, глупый вопрос!
Я понимаю, что не могу передать вызов функции в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