我很好奇这通常是如何处理的,我认为它主要取决于引擎的实现,但是为了举例,让我们使用chrome,每次调用外部函数时都会重新创建嵌套函数,或者它们只是存储在某个地方,只能在该范围内访问?
答案 0 :(得分:1)
函数体将被编译一次并存储在某处。但是,如果函数引用任何自由变量,它将在其中有一个闭包环境,每次调用父函数时都会更改,以捕获该调用的变量绑定。
答案 1 :(得分:0)
每次调用外部函数时都会生成内部函数的副本。这不是浏览器优化的问题,而是必需品,因为每个闭包需要保持对在其自己的外部范围内声明的变量的引用。
function outer()
{
function inner()
{
}
return inner;
}
var inner1 = outer();
var inner2 = outer();
console.log('Inner functions are ' + (inner1 === inner2 ? 'identical' : 'different'));
无论如何,这并不意味着这些实例没有针对引擎级别的性能进行优化,而是在运行时缓存。例如,Chromium缓存函数编译数据和call sites,即代码中发生函数调用的位置,以加快执行速度。