我倾向于把 JavaScript 想成 Ruby,第一行被解释执行,最后一行直到最后才被解释。
但是由于JavaScript受提升规则的约束,例如:
console.log(foo); // foo already has a value
function foo() {
return 123;
}
那么如果 console.log
是从 HTML 链接的 JavaScript 文件的第一行,文件是 200kb,然后 HTML 文件链接了其他 10 个 JavaScript 文件,并且 foo
定义在最后一个文件的最后一行,那么由于提升规则,即使在第一行也需要定义foo
,所以这意味着所有11个文件必须下载并解释才能执行第一行?
最佳答案
没有。浏览器一次处理一个文件(或者更确切地说,脚本元素)。稍后的脚本元素将被添加到相同的环境(因此共享变量)但不会等待。
如果您加载的第一个文件调用了一个在读取第二个文件之前未定义的函数,那么它将出错。 (除非该调用来自一个直到第二个文件加载后才被调用的函数)。
关于javascript - 在执行第一行之前是否需要解释每一行 JavaScript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14977856/