Javascript中的匿名函数和传统函数之间有什么内存使用差异吗?如果是这样,如何
Is there any memory usage difference between anonymous functions and traditional functions in Javascript? if so, how?
在Javascript中匿名函数和普通函数之间有什么内存使用差异吗?
如果是这样,如何?你能解释一下吗?
如果您所说的"普通函数"是指在脚本的根级别声明为 function a(){
的函数,即附加到窗口对象的函数,是的,存在差异:
- 附加到 window 对象的函数不会被加码处理,而匿名函数可以在不再使用它们时立即被加码处理。
- 它们可能会减慢对 window 对象其他变量的访问速度(在根级别附加函数有时被限定为"混乱的全局命名空间",但避免它的原因主要是拥有更干净的代码并避免名称冲突)。
- 匿名函数是闭包:它们保留指向其封闭作用域的指针,从而可以使用在此作用域中定义的变量。一个副作用是这个作用域不能在函数之前被斩首,所以这个函数可能比你想象的和"普通函数"更重(你可以添加一个空作用域来包围匿名声明,如果你不需要作用域的变量,可以防止这种影响,但我不知道javascript引擎是否可以优化部分封闭作用域,我建议你不要这样做,如果您不会检测到循环引用)。
但是这些差异通常很小,您通常不必注意这一点。在大多数页面中,您的匿名函数无论如何都不会被丢弃,因为您不会删除事件处理程序(通常是匿名函数的第一个根本原因)。
全局(过早优化是根源等)我建议您喜欢可读性,只要您没有乱码问题。Javascript引擎和它们的GC变化很大,所以你的努力可能是无用的。
谷歌有一个关于闭包和内存的有趣通知。
相关文章:
- 如果使用javascript函数屏幕太小,我该如何更改HTML文件的背景色
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 如果函数返回True,则显示Javascript按钮
- 如果 JS 中的函数是一流的,那么在定义它们之前允许调用它们是什么
- 如果在构造函数内部为else,则Javascript是可选的
- 我如何才能继续'如果'语句来比较作为参数的多个函数返回值
- 如果在'/'执行此函数的途径是可以异步执行此代码
- 如果文本或值以字符开头,请运行函数
- 如果没有其他函数链接到promise,则默认行为
- 如果没有document.ready(),我怎么能拥有多个javascript函数呢
- 根据条件将函数放入数组中(如果选中复选框)
- 如果变量不是't已传递给函数.这是正确的方式吗
- Don'如果字段为空,则不运行函数
- j查询点击事件;调用特定函数(如果可用)
- lodash 是否有单行方法来调用函数(如果存在)
- 是否有可用于<对象>的Javascript“Evoke”函数 - 如果有,它是什么
- 结束函数(如果$thisPage等于特定页面)
- 调用函数(如果移动)
- jQuery mouseEnter 函数 - 如果颜色还没有,则更改颜色
- 一个JS函数如果是一个正在工作的JS函数的近似副本,那么它将无法工作