如果我的页面中有多个脚本标记,例如:
<script src="js/jquery-1.7.min.js" type="text/javascript"></script>
<script src="js/jquery.jplayer.min.js" type="text/javascript"></script>
<script src="js/globals.js" type="text/javascript"></script>
<script src="js/sound.js" type="text/javascript"></script>
我可以依赖这样一个事实:当加载后者的代码时,前代的代码已经可用了吗?
答案 0 :(得分:8)
它们可以并行加载(通过网络),但它们会按顺序进行评估。
所以是的,你可以依赖订单。
答案 1 :(得分:6)
简短:是的:
在脚本标记中没有指定defer
或async
属性,规范说,浏览器必须按顺序(同步)加载这些文件。
换句话说,浏览器发现需要获取的普通脚本标记
虽然“现代”浏览器可能仍然试图优化该过程,但需要应用这些步骤(至少类似于流程)。这就是为什么您应该在<body>
标记的底部放置脚本标记而不进一步指定的原因。在加载/执行脚本时,甚至DOM渲染过程也会停止。
为避免这种情况,您可以在这些脚本代码中指定defer
或async
(仅限HTML5)属性,例如
<script defer src="/foo/bar.js"></script>
告诉浏览器它是一个脚本,意味着在解析文档后执行。
答案 2 :(得分:6)
通常,脚本会按顺序下载(请参阅this page):
因为JavaScript代码可以改变Web的内容和布局 页面,浏览器延迟呈现脚本后面的任何内容 标记,直到该脚本已被下载,解析和执行。 但是,更重要的是,对于往返时间,许多浏览器会阻止 下载资源[例如样式表,图像和其他脚本] 脚本之后在文档中引用,直到这些脚本为止 下载并执行。
答案 3 :(得分:4)
它们是并行加载的,但它们只在每个文件加载后运行一次。 所以答案是肯定的,你可以依靠这个事实。