主要浏览器无法保证JavaScript <script>标签执行的顺序?

Nik*_*ita 28 javascript browser

在主要浏览器中是否确保以下脚本标记始终按顺序和按声明顺序执行?即我应该假设以下代码不会总是在警报中产生x =='ab'?

<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>
Run Code Online (Sandbox Code Playgroud)

...而x可能会成为以下之一:

  1. 'ba' - 如果标签B在A之前执行
  2. 'a'或'b' - A和B并行执行的竞争条件(尽管看起来这个帖子似乎清楚地说浏览器只分配JS的单个线程)

Chr*_*heD 33

这些非动态添加script标签的执行顺序应该完全sequentially在每个浏览器中:

从片断此链接:

出现在<script></script>标签之间的JavaScript语句按照出现的顺序执行; 当文件中出现多个脚本时,脚本将按照它们出现的顺序执行.

但是,事情可能会在您:

  • 对于嵌套的`document.write`脚本,情况甚至如此,请参阅kangax的[document.write脚本执行顺序](http://kangax.github.com/jstests/document_write_script_execution_order_test/). (3认同)