在将函数分配给事件之前将函数存储在变量中有什么好处吗?

Is there any benefit in storing a function in a variable before assigning it to an event?

本文关键字:函数 什么 存储 分配 事件 变量      更新时间:2023-09-26

1

document.onkeydown = function(a) {
    //
};

阿拉伯数字

var a = function(a) {
    //
};
document.onkeydown = a;

我的想法是,也许在第一种情况下,每次事件发生时都需要重新解析该函数(因为缺乏更好的词),而在第二种情况下,它只指向已经解析的函数。

如果不是这个,也许还有另一个(任何)区别。

更新

如果我理解正确,它们之间存在差异,最好使用第二个。

1

var a = window.onresize = function() {
    //
};
// ...
a();

阿拉伯数字

var a = function() {
    //
};
window.onresize = a;
// ...
a();

在您当前的形式中,没有区别(匿名函数甚至可能更快一点)。单独存储函数的唯一优点是当您在循环中执行此操作时(或者如果函数可能有其他用途)。


例如:

var elements = document.getElementsByTagName('input');
for ( var i = 0; i < elements.length; i++ ) {
    element[i].onkeydown = function () {
        // whatever
    }
}

每个元素都将获得自己的函数副本,这会增加页面的内存使用量。

如果改为将函数存储在循环外部:

var elements = document.getElementsByTagName('input');
var eventListener = function () {
    // whatever
};
for ( var i = 0; i < elements.length; i++ ) {
    element[i].onkeydown = eventListener;
}

它们都将共享相同的功能。


附言正如@VisioN所指出的,更好的方法是使用 addEventListener .同样的规则也适用于那里。