用作 Jquery 回调时匿名函数与命名函数的内存开销
Memory overhead of anonymous functions vs named functions when used as Jquery callbacks
我正在学习JS/JQuery和匿名函数和闭包。 我见过这样的例子:
$('.button').click(function(){
/* Animations */
/* Other Stuff */
});
如果有多个按钮,这不是效率低下吗? 这不就是在内存中存储匿名函数原型的类似副本吗?(纠正我的术语) 这样做不是更好吗:
function handleClick(){
/* Animations */
/* Other Stuff */
}
('.button').click(handleClick);
或者,如果需要引用按钮,甚至可以这样:
function handleClick($obj){
/* Animations */
/* Other Stuff */
}
//multiple anon functions again, but they all reference ONE handleClick function
('.button').click((function($obj){
return function(){handleClick($obj)};
})($(this));
当你使用命名函数时,它只存在于全局闭包上,但是如果你在运行时定义函数,它们会在(父函数的闭包)一个新的闭包中创建,导致父变量被保留,即使你不再需要该函数。
简而言之,仅当您需要访问位于父函数中的变量时,才尝试匿名函数。匿名函数几乎总是比命名函数更昂贵。但是在全局闭包中定义的命名函数会污染全局命名空间,请自行决定。
根据设计,观察者模式只保留观察器的一个实例。然后,事件处理程序使用事件对象的其他实例多次调用此观察器,该事件对象保存事件参数:哪个元素触发了事件,上下文是什么,...等
因此,处理程序不是重复的,而是在每个主题的"侦听器存储"中引用的。
注意:
Kemal Dag还指出,根据定义,匿名函数提供的性能低于命名函数,我不知道这是否属实,但如果是,差异可以忽略不计。特别是对于像JavaScript这样的语言,它广泛使用anon函数,它无法承受对性能的影响。
相关文章:
- Object.assign(),函数方法和内存使用
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 避免将jquery选择器作为构造函数参数发送时内存泄漏
- 将pased函数的参数存储在我的内存函数中
- 测量JavaScript函数的内存使用情况、执行时间和性能
- Javascript中的匿名函数和传统函数之间有什么内存使用差异吗?如果是这样,如何
- 为什么这个函数会占用大量的内存
- 在 javascript 函数和内存管理中声明变量
- 将文字/对象/类传递给具有数千次调用的函数的内存含义
- 为什么此函数会导致内存泄漏
- JavaScript 声明的函数在脚本加载时消耗多少内存
- 在函数中创建 jQuery 对象然后不使用它是否会产生内存泄漏
- 用作 Jquery 回调时匿名函数与命名函数的内存开销
- 内存中函数的大小
- javascript/nodejs:在大的、分块的数据集上同步调用一组类似的异步函数会导致内存泄漏
- 删除脚本元素是否会从内存中删除其函数
- 是否可以将Javascript函数存储在内存中,以便在网站的多个页面上使用
- 用JavaScript重新创建一个函数需要多少内存
- 为什么函数中改变的对象会改变它们在内存中指向的内容,但有时会创建一个新的内存对象
- 这个函数是否存在内存泄漏?