JavaScript setTimeout の第三引数について

以下のような関数があるとします。

const log = message => {
	console.log(message);
};

setTimeout を使って3秒後にこの関数を実行したいとします。

以下のようにしたらうまくいきそうですが、これは即時実行されます。

setTimeout(log('tamibouz'), 3000);

そのため、log を実行する無名関数を指定する必要があります。

setTimeout(() => {
  log('tamibouz');
}, 3000);

ただ、あえて無名関数をつかうのも気持ち悪いと感じる人もいると思います。

setTimeout の第三引数は、第一引数の関数に渡るのでこれを利用できます。

setTimeout(log, 3000, 'tamibouz');