web-dev-qa-db-fra.com

Pourquoi la méthode est-elle exécutée immédiatement lorsque j'utilise setTimeout?

J'essaie d'écrire un code simple avec un setTimeout, mais le setTimeout n'attendra pas le temps qu'il suppose et le code s'exécutera immédiatement. Qu'est-ce que je fais mal?

setTimeout(testfunction(), 2000);
54
Adler

Vous appelez la fonction immédiatement et planifiez sa valeur de retour.

Utilisation:

setTimeout(testFunction, 2000);
                       ^

Remarque: pas de parens.

116
Mat

Supprimer la parenthèse

setTimeout(testfunction(), 2000);

Si vous souhaitez envoyer des paramètres à la fonction, vous pouvez créer une fonction anonyme qui appellera alors la fonction souhaitée.

setTimeout(function() {

    testfunction('hello');

}, 2000);

Modifier

Quelqu'un a suggéré d'envoyer une chaîne comme premier paramètre de setTimeout. Je suggère de ne pas suivre cela et de ne jamais envoyer de chaîne comme premier paramètre setTimeout, car la fonction eval sera utilisée. C'est une mauvaise pratique et devrait être évitée si possible.

21
Jose Faeti

Supprimez la parenthèse après le nom de la fonction de test:

setTimeout(testfunction, 2000);

La raison en est que le premier argument de setTimeout doit être une fonction référence, pas la valeur de retour de la fonction. Dans votre code, testfunction est appelé immédiatement et la valeur de retour est envoyée à setTimeout.

6
Emil Vikström

Eh bien, vous avez peut-être obtenu la réponse, mais j'explique la cause et la solution. Il existe deux façons d'appeler une fonction après un laps de temps requis.

1. setTimeout ("FUNC_NAME () ', TIME_IN_MS);
Ici FUNC_NAME entre guillemets doubles est la fonction d'origine que vous souhaitez appeler après TIME_IN_MS millisecondes. En effet, si vous ne mettez pas les guillemets, alors que Java est en train d'être interprété, la fonction sera immédiatement exécutée et votre objectif sera vaincu. Pour laisser l'interprète sauter l'instruction, nous devons mettre des guillemets ici.
2. setTimeout (fonction () {FUNC_NAME ()}, TIME_IN_MS);
Ici, une fonction anonyme est créée qui indique à l'interprète de s'exécuter après un certain temps au lieu d'évaluer le temps.

Merci shaILU

2
shaILU