我正在学习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/

10-12 12:29
查看更多