2010-01-07 4 views
0

La question SO (load-and-execution-sequence-of-a-web-page) donne des détails sur l'ordre d'exécution de la page html. Il indique que la balise de script est exécutée séquentiellement avec un seul thread.Séquence d'exécution Javascript

J'ai le code suivant sur ma page:

if(booleanTest)eval('parent.'+callback+'();'); 
    parent.hideWin(); 
    return false; 

En supposant que la méthode de rappel a un simple tout en boucle qui a couru pour un grand nombre de fois (par exemple: les temps 30K), je remarque que la hideWin était exécuté avant même que le callback ne soit terminé (testé sur IE7)

Le point est - si l'exécution est séquentielle alors pourquoi le comportement ci-dessus est-il en place - est-ce quelque chose de spécifique au navigateur ?.

+0

Comment êtes-vous sûr que le rappel est fait en cours d'exécution? Peut-être le navigateur tente-t-il d'optimiser un grand nombre d'opérations d'interface utilisateur et de retarder le rendu de certains effets du rappel, et l'appel hideWin est associé à quelques itérations? – Yuliy

+2

Notez que vous avez rarement besoin de 'eval'. Dans ce cas, vous pouvez utiliser le fait que les propriétés des objets peuvent être accédées à l'aide des clés de chaîne: 'if (booleanTest) {parent [callback](); } '. Si 'callback' n'est pas en fait une chaîne nommant une méthode définie sur' parent', alors la raison 'parent.hideWin()' s'exécute si rapidement que le script 'eval'-ed échoue. – outis

+1

+1 pour se débarrasser des evals pour l'accès à la propriété qui étaient communs en 1995, je suis étonné que les gens écrivent encore de nos jours –

Répondre

0

ouais, la deuxième ligne ne s'exécutera qu'après l'if + eval. je ferais une alerte avant hidewin pour vérifier si booleanTest et tout autre état sont les vals attendus