本地函数声明是否缓存?

function A() {
     function B() {
          ...
     }        
     B();
}

每次调用A都会创建函数B或者是否存在一些缓存。 不是让它像本地一样:

function A() {
    B();
}
function B() {
    ...
}

显着的性能改进?

这是一个风格选择是否有效? (在这种情况下, B只是A的助手函数),还是第二个应该受到速度的青睐?

为了可读性,是否应该使用或避免使用这种风格?

基准。

看起来像FF4为本地情况内联B ,并消除了函数调用开销。

其他浏览器呢?


在JS中声明一个内部函数的目的可能是在词汇上绑定到外部函数的局部变量/参数。 把它移出来成为一个顶级的功能就会失去这个目的。

为了回答这个问题:是的,至少在理论上每次都会创建内部函数,这就是编写代码时应如何查看内部函数,但智能优化器仍然可以将其转换为顶级函数,即使你有词汇依赖。 如果这是一个微型优化,我不会因为拥有一个内部函数而达到可读性和声明你的意图的目的。


Raynos,我看着你的jsperf测试,看起来你正在测试函数声明,而不是函数执行。

请参阅下面的链接。 这有帮助吗?

另一个基准

我会这样说:

  • 在您的示例代码中,每次调用A时都会创建B. (在上面的示例中,请参阅外部普通测试。)

  • 从百分比来看,性能改进非常显着。 但是,如果真实世界的功能以微秒运行,您可能不会注意到其中的差异。

  • 另一个考虑因素是B(辅助函数)是“私人”(换句话说,只在A内部可见)对它有多重要。 查看我的链接中的外部即时功能以获得中途选项。


  • 这很奇怪,因为我猜想每次调用另一个函数时重新声明一个函数会减慢执行时间。

    有没有人有答案?

    我能想出的唯一解决方案是函数C必须保留范围,移到全局函数,执行函数D,然后返回。 而功能A通过执行保持在一个范围内。 有什么想法吗?

    链接地址: http://www.djcxy.com/p/51647.html

    上一篇: Are local function declarations cached?

    下一篇: Automatically turn on computer when A/C power is available