【问题标题】:Will JS engine compile nested functions declaration after code loading?JS引擎会在代码加载后编译嵌套函数声明吗?
【发布时间】:2018-02-25 09:05:06
【问题描述】:

正如我们所知,JavaScript 引擎实际上会在解释 JavaScript 代码之前对其进行编译。因此,在执行我们代码的任何部分之前,首先处理函数(也包括变量)。这叫“吊装”。

我想了解什么时候加载 js 代码 js 引擎将只编译全局范围内的函数声明还是嵌套?

【问题讨论】:

  • 这里处理范围无关紧要。
  • @connexo 我的意思是在根部分
  • 解析它们?是的当然。编译它们?不,不一定。这可能会延迟到函数被实际调用——它是一个JIT compiler 和启发式算法,何时准确地执行可能随时更改的操作。

标签: javascript javascript-engine


【解决方案1】:

坦率地说,这是 JS 引擎内部,javascript 规范并没有规定在加载文件时是否也编译函数。

但笼统地回答,JS 引擎在调用函数之前不会编译函数内部,因为对于 JS 引擎来说,重要的是初始编译/加载时间最短。

在第一次传递/编译中,所有引擎都感兴趣的是找到变量和函数,因为函数创建了一个闭包,它对函数内部的东西不感兴趣,直到函数被调用。

所以为了回答你的问题,引擎通常只会编译当前范围内的函数,可以是全局范围或另一个函数范围,它不会编译嵌套函数

【讨论】:

  • [...]JS engines does not parse the function internals until the function is called[...] 这不是真的。对于几乎所有当前的 JS 引擎,对于代码的任何部分,您都会收到 SyntaxError,因此引擎会对文件进行完整解析。但 JIT 编译器肯定不会编译所有代码。
  • 你是对的,这是一个错字,我的意思是编译而不是解析,我更新了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 2011-04-01
  • 2020-02-05
  • 1970-01-01
  • 2015-03-14
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多