开发者

Order of JavaScript <script> tag executions not guaranteed in major browsers?

Is it true that there are no guarantees across major browsers that the following script tags will always execute both sequentially AND in order of declaration? i.e. should I assume that the following code will not always yield x == 'ab' in alert?

<head>
    <script type="text/javascript">
      //tag A
      var x = x || ''; x += 'a';
    </script>
    <script type="text/javascript">
开发者_如何学JAVA      //tag B
      var x = x || ''; x += 'b';
    </script>
</head>
<body>
    <script type="text/javascript">
       alert('x='+x);
    <script>
</body>

... and it's possible that x will instead be one of the following:

  1. 'ba' - if tag B executes before A
  2. 'a' or 'b' - race condition where A and B execute in parallel (Though seems like this thread clearly says that browsers only allocate a single thread of JS)


The execution order of these non-dynamically added script tags should be purely sequentially in every browser:

Snippet from this link:

JavaScript statements that appear between <script> and </script> tags are executed in order of appearance; when more than one script appears in a file, the scripts are executed in the order in which they appear.

However, things could change as soon as you're:

  • triggering asynchronous processing through your own code (not in this example)
  • adding script tags dynamically
  • using the defer attribute.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜