web-dev-qa-db-fra.com

Settimeout n'est-il pas de retard de la même manière que l'exécution de la fonction instantanément?

Je regarde du code existant dans une application Web. J'ai vu ça:

window.setTimeout(function () { ... })

Est-ce la même chose que simplement exécuter le contenu de la fonction immédiatement?

51
Aishwar

Cela ne courira pas nécessairement tout de suite, non plus explicitement définir le délai à 0. La raison est que Settimeout supprime la fonction de la file d'attente d'exécution et qu'elle ne sera appelée que lorsque JavaScript est terminée avec la file d'attente d'exécution en cours.

console.log(1);
setTimeout(function() {console.log(2)});
console.log(3);
console.log(4);
console.log(5);
//console logs 1,3,4,5,2

pour plus de détails, voir http://javascriptweblog.wordpress.com/2010/06/28/Snerstanding-javascript-Mers/

84
angusC

Il existe un délai minimum que setTimeout utilise (4 ms selon HTML5, Firefox 3.6 utilise 10 ms). Il y a une discussion à ce sujet sur le Centre de développeur Mozilla page de documentation .

21
Daniel Vandersluis

Il vous manque le paramètre millisecond ...

setTimeout(function() { /*something*/ }, 0);

Le 0 définit le délai à 0, mais ce qu'il fait en réalité, c'est de laisser votre fonction "Sauter la file d'attente" de la liste d'exécution du navigateur. Le navigateur a un tas de choses à faire, telles que des objets de rendu sur la page, et en appelant cela, votre fonction fonctionnera dès que le navigateur a des cycles.

1
Gary