2

我倾向于把 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 个文件?

4

1 回答 1

0

不,浏览器一次处理一个文件(或者更确切地说,脚本元素)。稍后的脚本元素将被添加到相同的环境中(因此共享变量),但不会被等待。

如果您加载的第一个文件调用了一个在读取第二个文件之前未定义的函数,那么它将出错。(除非该调用来自一个直到加载第二个文件后才调用的函数)。

于 2013-02-20T10:44:52.870 回答