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:
- 'ba' - if tag B executes before A
- '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.
精彩评论