Le troisième argument horaires le rappel à exécuter à un moment donné dans l'avenir.
Votre premier appel à setTimeout(say(2), 5000)
est en fait le même que le premier appel à say(1)
, en ce sens qu'ils invoquent tous deux la fonction say
immédiatement. Vous devez passer une fonction comme vous l'avez fait avec les autres.
Ainsi, le premier serait planifié pendant 5 secondes, mais ce n'est pas à cause de l'invocation immédiate. Les deux derniers sont prévus pour 1 seconde, puis 2 secondes.
Mais étant donné que les rappels setTimeout
sont exécutés de manière asynchrone, tous les appels à setTimeout
se produisent immédiatement, l'un après l'autre, sans attendre les rappels.
Le dernier appel à setTimeout
imprimera 4
car tous les arguments donnés après les millisecondes l'argument se transmis à la fonction de rappel, de sorte que votre valeur 4
est réexpédié comme premier argument à say
.
alors pourquoi l'alerte dure-t-elle en dernier? et pourquoi cette commande ou alerte? –
La première alerte est simplement appelée sans délai. – unholybear
Le premier paramètre passé au second appel n'est pas une déclaration de fonction mais un appel de fonction, qui est exécuté immédiatement. – unholybear