Afin de JavaScript <script> tag exécutions n'est pas garantie dans les principaux navigateurs?

Est-il vrai qu'il n'y a pas de garanties sur les principaux navigateurs que les balises de script s'exécute toujours à la fois séquentiellement ET dans leur ordre de déclaration? à savoir, si je suppose que le code suivant ne sera pas toujours le rendement x == 'ab' en alerte?

<head>
    <script type="text/javascript">
      //tag A
      var x = x || ''; x += 'a';
    </script>
    <script type="text/javascript">
      //tag B
      var x = x || ''; x += 'b';
    </script>
</head>
<body>
    <script type="text/javascript">
       alert('x='+x);
    <script>
</body>

... et il est possible que x va plutôt être l'un des suivants:

  1. 'ba' - si l'étiquette B s'exécute avant Un
  2. 'a' ou 'b' - race condition où A et B s'exécutent en parallèle (Mais semble comme cette fil clairement dit que les navigateurs seulement allouer un seul thread de JS)
  • Je suis familier avec ce qui est un problème lié js src fichiers, mais pas pour les blocs de script tel que défini dans la question. par exemple <script src="...."></script><script>code qui repose sur précédemment lié fichier</script> échouera 9 fois sur dix (cache fichier js étant de 1 à 10)
  • Les navigateurs devraient très certainement être l'exécution de ces scripts à la fois séquentiellement et en ordre. Cette expérience a été le contraire?
  • Ce n'est pas un problème lié JS fichiers, sauf s'ils utilisent async ou defer attributs, ou eux-mêmes écrire/ajouter d'autres scripts.
  • Faut lire: html5rocks.com/en/tutorials/speed/script-loading
  • J'ai aussi eu un cas décrit par @JonathanFingland ("<script src="...."></script><script>code that relies on previously linked file</script>") - la src a été chargement de jQuery, le bloc de script suivant comptais sur lui - mais trouvé $ être indéfini. Ajout d'un setTimeout(..., 0) 'autour' du bloc de script code pour donner jQuery de temps à charger travaillé. Donc, il se passe quelque chose ici que je ne m'attends pas.
InformationsquelleAutor Nikita | 2010-07-12