JavaScript是否在每次调用时编译该函数?

时间:2013-12-05 03:35:33

标签: javascript compiler-optimization

说我有这个功能:

function A() {
  function B() {
    return 1;
  }

  return 1 + B();
}

每次调用函数 A 时,是否会编译函数 B

我记得有人说它不会。但是我的记忆生气了,我找不到参考资料。

3 个答案:

答案 0 :(得分:5)

JavaScript标准规定JavaScript执行环境必须解析该函数​​并产生早期错误,如果它们存在则拒绝执行脚本中的任何代码(例如缺少紧密引号,无法匹配的花括号等)。它没有说明之后会发生什么。

但是,所有现代引擎都会在执行之前生成与该函数对应的本机代码。所有后续调用都将使用先前生成的代码。有时候引擎会使用通过执行收集的信息来重新生成代码,或者如果它可以确定这将导致更好的执行时间,它可能会内联函数的代码。

答案 1 :(得分:1)

JavaScript是一种解释型语言,而不是编译语言,因此它永远不会编译该函数。

编辑:除非您的javascript引擎通过编译进行优化,在这种情况下,它取决于它是哪个引擎但不要担心它,因为它不会在没有理由的情况下重新编译它。

答案 2 :(得分:0)

如果您的意思是调用(或调用)而不是编译,答案是肯定的。每次调用A时调用B作为A调用B。