このコードが何も成し遂げていないという事実を無視してください。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
への参照を使用して、それに沿ってname
を送信するためにbind()
を使用して問題を解決することができますが、なぜ私は、これらの追加手順を実行する必要がありますか?
let names = ['Andy', 'Ross', 'David'];
function printer (name) {
console.log(name);
}
names.forEach(name => setTimeout(printer.bind(null, name), 1000));
結果:最初の引数としての機能を取る必要があります
setTimeout(function(){printer(name)}, 1000)
setTimeoutは後で呼び出されるコールバックを受け取る必要があるため、 –