我正在学习JS/JQuery以及匿名函数和闭包。我看过这样的例子:
$('.button').click(function(){
/* Animations */
/* Other Stuff */
});
如果按钮不止一个,那效率不低吗?这不只是在内存中存储匿名函数原型(prototype)的相似副本吗? (更正我的术语)这样做不是更好:
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));
最佳答案
根据设计,the observer pattern仅保留观察者的一个实例。然后,事件处理程序会与事件对象的其他实例一起多次调用此观察者,该实例包含事件参数:哪个元素触发了该事件,什么是上下文等...等等
因此,处理程序不是重复的,而是在每个主题的“监听器存储库”中引用的。
笔记:
凯末尔·达格(Kemal Dag)还指出,根据定义,匿名函数提供的性能要低于命名函数,我不知道它是否为真,但如果是,则区别可以忽略不计。特别是对于JavaScript这样的语言,它广泛使用anon函数,因此不会对其性能产生影响。
关于javascript - 用作Jquery回调时,匿名函数与命名函数的内存开销,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18656718/