在主流浏览器中,以下脚本标签是否总是按照声明的顺序连续执行?也就是说,我是否应该假设以下代码不会总是在 alert 中输出 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>
...并且x有可能是以下之一:
- 'ba' - 如果标记B在A之前执行
- 'a'或'b' - A和B同时执行的竞态条件(尽管此线程明确表示浏览器只分配单个JS线程)
async
或defer
属性,或者自己编写/添加其他脚本,否则这也不是问题。 - bobince<script src="...."></script><script>依赖于先前链接文件的代码</script>
") - src正在加载jQuery,下面的脚本块依赖它 - 但是发现$
未定义。在脚本块代码周围添加了一个setTimeout(..., 0)
来给jQuery加载时间 - 运行正常。所以这里发生了一些意料之外的事情。 - Heinrich Ulbricht