2012-01-15 14 views
3

jQueryについて学び始めました。私はhtml + css Webデザイナーの方が多いので、おそらく機能に少しは慣れ親しんだもの、特に匿名のものがあると言うことができます。匿名関数は呼び出し関数よりも効果的ですか?

だから、あなたが一度それを使用している場合は、匿名関数を使用しています

function toggle1() { $(this).prev().addClass('open');} 
function toggle2() { $(this).prev().removeClass('open');} 
$('p.expander').toggle(toggle1, toggle2); 

...

と言う

$('p.expander').toggle(
    function() { 
    $(this).prev().addClass('open'); 
    }, 
    function() { 
    $(this).prev().removeClass('open'); 
    } 
); 

の間であれば違いは何でしょうか。また、関数を複数回使用する場合は、呼び出す必要があります。

タイトルの状態は、他のものよりも効果的ですか?記事の99%が匿名の記事を使用しているようです。セミコロンや括弧が忘れているので、時々コードを読むのは難しいです。

答えて

1

この特定の状況では、違いはありません。しかし、考えてみます。

$(document).ready(function(){ 

    var a, b, c, 
     d, e, f, 
     g, h, i; 


    $('p.expander').toggle(
     function() { 
     $(this).prev().addClass('open'); 
     }, 
     function() { 
     $(this).prev().removeClass('open'); 
     } 
    ); 
}); 

このシナリオでは

function toggle1 { $(this).prev().addClass('open');} 
function toggle2 { $(this).prev().removeClass('open');} 

$(document).ready(function(){ 

    var a, b, c, 
     d, e, f, 
     g, h, i; 


    $('p.expander').toggle(toggle1, toggle2); 
}); 

対、無名関数は、大規模な環境を(多くのメモリを使用)、ブラウザはそれを最適化しない限り、彼らはおよそ a, b, c, d, e, f, g, e, h, iを知っているので、含まれています。

+0

これは興味深いです。下の例では、変数a-iについて知らないのですか?そして、上の例でより多くを使用するのはなぜですか?それはどのようにしてより大きな環境を持っていますか? – Matt

+0

@Aliいいえ、彼らはスコープの外で宣言されているからではありません。あなたはこれを最適化しないブラウザを見つけるのは難しいでしょうが。 – Esailija

1

名前は、その違いです。どちらも実行時に同等です。匿名関数を定義すると、他の場所で再利用することはできません。このコードを再利用するつもりがない場合に便利です。名前付き関数を再利用する場合は、それを使用します。

は、ここでは、複数の場所で名前の関数を再利用することができます例を示します

$('p.expander').toggle(toggle1, toggle2); 
$.post('/foo/bar', toggle1); 
$('a.foo').click(toggle2); 
1

匿名とunanonymous機能間何のパフォーマンスの違いはありません。
関数を1回だけ呼び出すと、その関数を名前にするのは冗長です。

同じ機能を2回以上呼び出す場合は、その機能に名前を付ける必要があります。

関連する問題