Javascript中的匿名函数和传统函数之间有什么内存使用差异吗?如果是这样,如何

Is there any memory usage difference between anonymous functions and traditional functions in Javascript? if so, how?

本文关键字:函数 如果 如何 内存 传统 Javascript 什么 之间      更新时间:2023-09-26

在Javascript中匿名函数和普通函数之间有什么内存使用差异吗?

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

如果您所说的"普通函数"是指在脚本的根级别声明为 function a(){ 的函数,即附加到窗口对象的函数,是的,存在差异:

  • 附加到 window 对象的函数不会被加码处理,而匿名函数可以在不再使用它们时立即被加码处理。
  • 它们可能会减慢对 window 对象其他变量的访问速度(在根级别附加函数有时被限定为"混乱的全局命名空间",但避免它的原因主要是拥有更干净的代码并避免名称冲突)。
  • 匿名函数是闭包:它们保留指向其封闭作用域的指针,从而可以使用在此作用域中定义的变量。一个副作用是这个作用域不能在函数之前被斩首,所以这个函数可能比你想象的和"普通函数"更重(你可以添加一个空作用域来包围匿名声明,如果你不需要作用域的变量,可以防止这种影响,但我不知道javascript引擎是否可以优化部分封闭作用域,我建议你不要这样做,如果您不会检测到循环引用)。

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

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

谷歌有一个关于闭包和内存的有趣通知。