0

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();
4

1 回答 1

4

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


例如:

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

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


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

于 2013-01-29T00:43:18.533 回答