2017-10-16 12 views
-1

On m'a demandé dans une entrevue ce que la sortie du code suivant:sortie d'alerte Javascript dans seq ordre

function say(a) { 
    alert(a); 
} 
say(1); 
setTimeout(say(2), 5000); 
setTimeout(function() { 
    say(3); 
}, 1000); 
setTimeout(say, 2000, 4); 

Il est censé alerter 1 2 3 4 mais je ne sais pas pourquoi dans cet ordre et je ne comprends pas ce que représente le troisième argument de la dernière fonction setTimeout?

Répondre

0

param1, ..., paramN paramètres supplémentaires en option qui sont passés par la fonction spécifiée par la fonction ou le code une fois la minuterie arrive à expiration. Le 4 dans le dernier appel est passé à la fonction say en tant que paramètre.

+0

alors pourquoi l'alerte dure-t-elle en dernier? et pourquoi cette commande ou alerte? –

+0

La première alerte est simplement appelée sans délai. – unholybear

+0

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

0

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.

0

Le 3ème paramètre est l'argument de la fonction Si une fonction est appelée avec trop d'arguments (plus que déclarés), ces arguments peuvent être atteints en utilisant l'objet arguments. c'est pourquoi il est de donner 4. Pour plus d'informations essayer la fonction suivante

setTimeout(say, 2000); 

Le code ci-dessus alertera non défini Il est parce que si une fonction est appelée avec des arguments manquants (moins déclarés), les valeurs manquantes sont fixées à: non défini

0

tout d'abord il alertera , puis au bout de 5 secondes, il alertera , puis après 1 seconde il alertera , et enfin il alertera après 2 secondes. settimeout signifie que vous devez exécuter une fonction après un nombre de millisecondes. Et puisque cette fonction prend deux arguments (la fonction que vous voulez exécuter, et le nombre de millièmes de secondes); alors dans la 6ème ligne, vous dites que vous voulez définir une fonction spécifique, et dans cette fonction vous voulez exécuter dites fonction (imbriquée), et la valeur 1000 est le deuxième argument de la fonction settimeout.

+0

Ce n'est pas comme ça que ça fonctionne. L'ordre de 'setTimeout' appelé ne définit pas l'ordre d'exécution du rappel. – llama