Diferença entre setTimeout com e sem aspas e parênteses

Estou aprendendo JavaScript e aprendi recentemente sobre eventos de sincronização do JavaScript. Quando eu aprendi sobresetTimeout aW3Schools, Notei uma figura estranha que eu não encontrei antes. Eles estão usando aspas duplas e, em seguida, chamam a função.

Exemplo:

<code>setTimeout("alertMsg()", 3000);
</code>

Eu sei que aspas duplas e simples em JavaScript significam uma string.

Também vi que posso fazer o mesmo assim:

<code>setTimeout(alertMsg, 3000);
</code>

Com os parênteses está se referindo, sem os parênteses é copiado. Quando estou usando as aspas e os parênteses, está ficando louco.

Ficarei feliz se alguém puder me explicar a diferença entre essas três formas de usarsetTimeout:

Com os parênteses:

<code>setTimeout("alertMsg()", 3000);
</code>

Sem as aspas e os parênteses:

<code>setTimeout(alertMsg, 3000);
</code>

E o terceiro é apenas usando citações:

<code>setTimeout("alertMsg", 3000);
</code>

N .: Uma melhor fonte parasetTimeout referência seriaMDN.

questionAnswers(4)

yourAnswerToTheQuestion