说我有这个功能:
function A() {
function B() {
return 1;
}
return 1 + B();
}
每次调用函数 A 时,是否会编译函数 B ?
我记得有人说它不会。但是我的记忆生气了,我找不到参考资料。
答案 0 :(得分:5)
JavaScript标准规定JavaScript执行环境必须解析该函数并产生早期错误,如果它们存在则拒绝执行脚本中的任何代码(例如缺少紧密引号,无法匹配的花括号等)。它没有说明之后会发生什么。
但是,所有现代引擎都会在执行之前生成与该函数对应的本机代码。所有后续调用都将使用先前生成的代码。有时候引擎会使用通过执行收集的信息来重新生成代码,或者如果它可以确定这将导致更好的执行时间,它可能会内联函数的代码。
答案 1 :(得分:1)
JavaScript是一种解释型语言,而不是编译语言,因此它永远不会编译该函数。
编辑:除非您的javascript引擎通过编译进行优化,在这种情况下,它取决于它是哪个引擎但不要担心它,因为它不会在没有理由的情况下重新编译它。
答案 2 :(得分:0)
如果您的意思是调用(或调用)而不是编译,答案是肯定的。每次调用A时调用B作为A调用B。