0

1

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

2

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

最初のケースでは、イベントが発生するたびに関数を再解析する必要があるかもしれませんが(より良い言葉がないため)、2 番目のケースでは既に解析された関数を指すだけです。

これではない場合は、別の (任意の) 違いがある可能性があります。

アップデート

これを正しく理解すれば、これらには違いがあり、2番目を使用する方が適切です。

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 @Vi​​sioN が指摘したように、より良い方法は を使用することaddEventListenerです。そこにも同じルールが適用されます。

于 2013-01-29T00:43:18.533 に答える