javascript - 在执行第一行之前是否需要解释每一行 JavaScript?

标签 javascript

我倾向于把 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/

相关文章:

javascript - 开 Jest 期望之后的一切都没有被调用

javascript - 滚动时更改 bootstrap 3 导航栏的颜色

javascript - 关于文件上传的查询

javascript - 让 html 元素保持在相同位置而不使用位置 : fixed

javascript - JQuery 切换数字和字符输入

javascript - 添加全部按钮不会使选择删除验证,就像选择了某些内容一样

javascript - Firebase 实时数据库快照不完整/缺少多个层

javascript - 将更改事件绑定(bind)到 jquery 中的输入字段组

javascript - 手动更新后单向绑定(bind)不起作用

从 UIWebView 调用 Swift 的 Javascript