2010-04-29 7 views
7

Est-ce:portée jQuery et la fonction

($.fn.myFunc = function() { 
     var Dennis = function() { /*code */ } 
     $('#Element').click(Dennis); 
    })(); 

équivalent à:

($.fn.myFunc = function() { 
     $('#Element').click(function() { /*code */ }); 
    })(); 

Sinon, quelqu'un peut-il s'il vous plaît expliquer la différence, et suggérer la meilleure voie à suivre pour les performances, la réutilisation des fonctions et la clarté de la lecture.

Merci!

Répondre

8

La seule différence est que le premier fournit une référence à la fonction.

Ainsi, vous pouvez le faire:

($.fn.myFunc = function() { 
    var Dennis = function() { /*code */ } 
    $('#Element').click(Dennis); 

    Dennis(); 
})(); 

ce qui est impossible avec ce dernier.

Cela peut être utile. Par exemple, je peux vouloir que le clic manipule une partie de la page, mais je veux aussi le faire au chargement de la page. Je pouvais le faire avec:

$(function(){ 

    var manipulateSomething = function() { 
     // do stuff 
    }; 

    // do it on click 
    $("#Element").click(manipulateSomething); 

    // and do it right now (document.ready) 
    manipulateSomething(); 

}); 

(En plus:. Vous n'appeler $("#Element").click(); d'y arriver à moins que vous vouliez tous les gestionnaires de clic sur #Element au feu)

0

C'est pareil. Je vais généralement avec le second, la route de la fonction anonyme. La seule raison de nommer votre fonction inline, comme dans le premier exemple, est si vous avez besoin de l'utiliser à nouveau, peut-être plus tard dans la fonction, ou si vous voulez être très clair sur la fonction. Mais même dans ce cas, si la fonction Dennis devait prendre des arguments, vous devez utiliser une nouvelle portée de fonction dans votre appel pour transmettre ces arguments le long de .

Les fermetures de fonctions anonymes sont les plus robustes.

0

le second semble plus joli :) mais c'est pareil

0

Oui, la fonction anonyme est plus claire, sans ajouter de fonctions nommées superflues appelées instantanément.

Si vous voulez vraiment mettre un nom là, vous can. Les noms ne sont généralement mis là que pour les rendre récursifs.