👀
setInterval() の引数にアロー関数を使う【個人学習まとめ】
setInterval()って?
構文
setInterval(関数,待ち時間);
第一引数に待ち時間(ミリ秒)が経過するたびに実行する関数本体を指定する。
第二引数に待ち時間を指定する(省略可。省略した場合は0
になる)。
間違い例
実際に自分がやらかしたコード。
setInterval(fn(...args),t);
このように書くと、fn
が即座に実行されてしまいfn
の戻り値がsetInterval
に渡される。
fn
が(x) => x * 2
、args
が[4]
の場合、fn
の戻り値は8
となる。
setInterval
は関数ではなく、値の8
を受け取りエラーとなる。
正しい例
最初にも書いたが、setInterval
の第一引数には関数本体を渡す必要がある。
setInterval(() => fn(...args), t);
このように書くことによって、setInterval
にfn(..args)
そのものを渡すことができる。
動作
間違い例(fn(...args)を直接渡す)
const fn = (x) => console.log(x * 2);
const args = [4];
setInterval(fn(...args), 1000);
即座にfn(4)
が実行されるためエラーとなる。
エラー内容
Uncaught TypeError TypeError [ERR_INVALID_ARG_TYPE]: The "callback" argument must be of type function. Received undefined
正しい例(アロー関数を使って「関数本体」を渡す)
const fn = (x) => console.log(x * 2);
const args = [4];
setInterval(() => fn(...args), 1000);
1秒ごとにfn(4)
が呼び出されて、結果8
が出力される。
個人的なまとめ
setInterval
関数の中でfn(...args)
を実行するためにアロー関数を引数として渡すというイメージを持つと分かりやすい。
Discussion