在将函数分配给事件之前将函数存储在变量中是否有任何好处?

时间:2013-01-29 00:42:48

标签: javascript

1

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

2

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

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

如果不是这样,可能会有另一个(任何)差异。

更新

如果我理解正确的话,这些之间会有所不同,最好使用第二种。

1

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

2

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

1 个答案:

答案 0 :(得分:4)

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


例如:

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;
}

他们都将拥有相同的功能。


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

相关问题