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

questionAnswers(5)

yourAnswerToTheQuestion