Javascript中的匿名函数和传统函数之间是否存在内存使用差异?如果是这样,怎么样?

Har*_*ari 3 javascript closures anonymous-function

Javascript中的匿名函数和普通函数之间是否有任何内存使用差异?

如果是这样,怎么样?你能解释一下吗?

Den*_*ret 5

如果通过"普通函数"表示function a(){在脚本的根级别声明的函数,那就是附加到窗口对象的函数,是的,存在差异:

  • 附加到窗口对象的函数不会被破坏,而匿名函数可以在您不再使用它们时立即被破坏.
  • 它们可能会减慢对窗口对象的其他变量的访问速度(在根级别附加函数有时会被称为"混乱的全局命名空间",但避免它的原因主要是为了拥有更清晰的代码并避免名称冲突).
  • 匿名函数是闭包:它们保持指向其封闭范围的指针,这使得可以使用此范围中定义的变量.副作用是这个范围不能在函数之前被使用,因此函数可能比你想象的要重,而不是"正常函数"(你可以添加一个空范围来包含匿名声明并防止这种效果,如果你不需要范围的变量,但我不知道javascript引擎是否可以优化掉部分封闭范围我建议你不要这样做,如果你没有检测循环引用).

但这些差异通常很小,通常你不必注意这一点.在你的大多数页面中,你的匿名函数无论如何都不会被删除,因为你不删除事件处理程序(通常是匿名函数的第一个根本原因).

全局(过早优化是根等)我建议你喜欢可读性,只要你没有乱码问题.Javascript引擎和他们的GC变化很大,所以你的努力可能毫无用处.

关于封闭和记忆,谷歌有一个有趣的通知.