NoB*_*ugs 8 javascript operator-precedence hoisting
我注意到某些脚本似乎在某个页面上被其他人调用,我想知道,脚本加载的具体顺序是什么?在引用.js脚本之前的页内?它们是按照从首次<script>提到的顺序运行到最后一页,还是依赖于浏览器?如何确保首先在页面中运行特定脚本?
只要没有动态加载脚本或标记为异步或延迟脚本,就会按照页面中遇到的顺序运行或评估脚本.因此,遇到的第一个脚本首先运行.
必须加载的外部引用的脚本文件将导致所有进一步的javascript执行等待,直到加载并解析并运行外部引用的文件.
因此,正常(非异步,非延迟)javascript的评估顺序是100%确定为在页面中遇到的顺序.
默认情况下,script在HTML文档中遇到标记时,会按顺序下载和评估标记.
但是,如果使用async或defer属性,则在脚本完成下载(异步)之后或在页面完成加载(延迟)之后执行.
我注意到某些脚本似乎在某个页面上的其他脚本之前被调用。我想知道,脚本加载的具体顺序是什么?
这是由 W3C 在其语言规范中设置的。例如,对于HTML 4.01 规范,它在第 18.2.4 节动态修改文档的第 1 项中定义。
引用 .js 脚本之前的页内?
看上面。不,内联脚本和链接脚本的处理方式相同。
它们是按页面中从第一个提到到最后一个的顺序运行的,还是依赖于浏览器?
规范要求它们从上到下按顺序运行。您必须找到一个根据规范实现该语言的浏览器。我现在想不出任何以不同方式处理 SCRIPT 标签的方法,但我确信这是可能的。
另一件需要考虑的事情是“跑步”的定义。这听起来像是语义解析,但事实并非如此。与任何编程语言一样,JavaScript 本身被设计为按照标准运行。JavaScript 在ECMA-262 5.1 版/2011 年 6 月标准中指定,以在第 7 节词汇约定中从左到右进行评估。(行尾被视为下一行最左边的字符。)本文档还提供了对语句和其他操作进行评估的顺序的约定,例如 WHILE 或 FOR 语句。
如何确保特定脚本首先在页面中运行?
(1) 把它放在最上面,以及 (2) 选择一个实现语言规范的浏览器。
但是,我觉得这个问题背后可能还有更多的东西。如果您试图阻止执行意外的代码,则必须阻止它,直到 ONLOAD 事件处理程序注册该页面已完成。(只需将您的操作包含在一个函数中或用 IF 包围它们以检查布尔标志,即 isLoaded 被 ONLOAD 设置为真。)然后,当 ONLOAD 事件处理程序触发时,您可以按自己的时间表启动操作,而无需不必担心诸如未实例化的 DOM 对象之类的事情。
| 归档时间: |
|
| 查看次数: |
18337 次 |
| 最近记录: |