42 votes

Fonction auto-exécutoire différence entre jquery et javascript

Quelles sont les différences entre les -

D'abord :-

(function () {

    var Book = 'hello';

}());

Deuxièmement:-

(function () {

    var Book = 'hello';

})();

Le premier et le second sont en quelque sorte similaires dans le travail

Troisième :-

(function ($) {

    var Book = 'hello';

})(jQuery);

Quel modèle dois-je utiliser et à quel endroit de mon codage Troisième modèle de module que j'ai vu en lisant un article sur backboneJS.

Ce que j'ai compris de Third one "self executing function with the argument "jQuery"" ....

Quelqu'un peut-il me donner une idée sur les expressions de fonctions immédiatement invoquées ? (IIFE) .

Merci !

0 votes

@Klaster Merci pour l'édition, oui c'est vraiment lié à l'invocation immédiate des fonctions

2 votes

Pourquoi un tag avec backbone.js ?

29voto

Bommox Points 718

Dans tous les cas, il s'agit d'une fonction anonyme. Je pense que le point 1 est identique au point 2. Dans le troisième cas, vous passez jQuery comme argument. C'est le cas lorsque vous voulez encapsuler jQuery dans la portée de votre fonction.

Par exemple, dans votre application, jQuery var pourrait être jQuery. Mais dans votre fonction anonyme, vous voudrez peut-être l'utiliser comme $.

(function ($) {
    //Here jQuery is $
    var Book = $(document.body).text();    

})(jQuery);

//Out of your function, you user jQuery as jQuery (in this example)
var Book = jQuery(document.body).text();

9voto

Jai Points 23908

C'est ce qu'on appelle une fermeture, afin d'éviter les conflits avec d'autres bibliothèques telles que mootools qui utilisent $ . De cette façon, vous pouvez vous assurer d'utiliser $ dans cette fonction en passant jQuery comme paramètre.

(function ($) {
   $(function () { // Here in this block you can use '$' in place of jQuery
    .......
   });
})(jQuery); //<----passing jquery to avoid any conflict with other libraries.

7voto

Neil Points 559

Les expressions de fonctions immédiatement invoquées (IIFE) sont l'une des principales caractéristiques de JavaScript. Son principal objectif est de ne pas encombrer les espaces de noms avec des fonctions et des variables jetables.

si vous n'utilisez une variable ou une fonction qu'une seule fois, vous n'avez pas besoin de la rendre disponible pour le reste du code (vous faites donc un accès privé, par exemple). Dans le cas des fonctions, vous pouvez simplement les rendre anonymes, comme dans l'exemple suivant :

(function(){
  console.log("Hello symfony world!");
}());

Veuillez consulter ce lien

En outre, voici un document utile vidéo explicative en moins de 7 minutes

0 votes

Belle explication dans le lien fourni !

1 votes

Le lien ci-dessus est cassé. Voici le lien corrigé Introduction aux IFFE

4voto

MirroredFate Points 2440

Comme toutes les autres réponses l'ont dit, dans la troisième fonction, vous passez JQuery à la fonction.

Je voudrais prendre un moment pour expliquer pourquoi les deux premiers sont identiques.

Lorsque vous créez une fonction, le nom de cette fonction est en fait un pointeur de fonction. Par exemple, en function foo(){} , foo est un pointeur sur la fonction que vous venez de créer (ce qui explique des choses comme cette ). Vous déréférencez ce pointeur (et donc exécutez la fonction) en ajoutant des parenthèses à la fin du nom de la fonction : foo() .

Si nous regardons à nouveau ce code, dans le numéro un, vous créez d'abord la fonction :

function () {

    var Book = 'hello';

}

Ensuite, vous le déréférencez, ce qui a pour effet d'exécuter la fonction : ()

Dans le deuxième exemple, vous entourez la totalité de la création de la fonction de parenthèses :

(function () {

    var Book = 'hello';

})

Cela permet de s'assurer que l'opération de création est effectuée avant la commande suivante, qui consiste à déréférencer à nouveau la fonction : () . Dans ce cas, les parenthèses ne sont pas vraiment nécessaires, car la fonction sera de toute façon créée avant d'être exécutée.

3voto

Andy Points 8361

Ces trois exemples sont Expressions de fonctions immédiatement invoquées ( IIFE )

La seule différence est que dans le troisième exemple jQuery est transmise en tant que variable, ce qui vous permet de l'utiliser au sein de l'IIFE en utilisant la convention de dénomination en dollars.

(function ($) {
  var Book = 'hello';
  $('#bookelement').html(Book);
})(jQuery);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X