2

我知道 Javascript 按顺序执行代码。但是,我总是试图确定是否有任何代码在编译执行每个函数后立即“逐行”运行,或者该脚本中的所有直接函数调用是否等待整个脚本完成解析,然后才能真正完成解析跑。

我想更好地理解 javascript 解析和执行代码的方式。主要用于外部脚本,在控制台日志中似乎有点难以观察。

一种适用的用途是在外部脚本中尽早尝试拦截“交互式”document.readyState,因为“交互式”状态有时会极早触发。根据http://bugs.jquery.com/ticket/12282#comment:15

4

2 回答 2

4

不可以。脚本标记的全部内容(无论它是内联的还是外部的)都必须在对其进行评估之前进行解析。

这是因为 javascript 'hoists' 变量和函数声明到其范围顶部的方式:http: //elegantcode.com/2011/03/24/basic-javascript-part-12-function-hoisting/

于 2013-04-05T01:37:05.423 回答
0

Javascript *一次编译并执行一个脚本(标签)。因此,在每个脚本标记中,无论是内联的还是源自文件的,整个代码都会被编译然后执行。但是每个单独的脚本标签都是按顺序编译和执行的。

您可以通过简单地运行以下两个示例来检查这一点:

示例 1:

<html>
<script>
    alert(x);
    var x;
</script>
</html>

上面的代码将警告“未定义”。另一方面..

示例 2:

<html>
<script>
    alert(x);
</script>
<script>
    var x;
</script>
</html>

上面的代码会触发错误,因为 x 不存在。


注意:* JavaScript 函数声明和评估顺序

于 2013-04-05T01:48:52.173 回答