1 minute

En une minute : Pourquoi jQuery en paramètre dans une IIFE

Flattr this!

Vous avez sûrement déjà croisé ce genre de code :

(function($){
/*...*/
})(jQuery);

Et vous vous êtes sûrement demandé pourquoi il y a jQuery en paramètre pour être du coup re-traduit en $. Qui pourtant vaut déjà $ dans les variables globales. La blague, c'est que de nombreux sagouins ont tendance à coller diverses choses dans leurs sites en plus de jQuery. Du genre du prototype ou encore du mootools. Ou d'autres bibliothèques qui exploitent le $.

Donc par sécurité, passer jQuery en paramètre vous assure que dans le corps de la fonction ci-dessus, $, c'est bien jQuery et pas autre chose. C'est d'ailleurs aussi pour ça que vous croiserez des fois ça :

(function($, undefined){
/*...*/
})(jQuery);

Là c'est pour vous assurer que undefined vaut bien undefined. Si si, j'ai déjà vu des bachibouzouks surcharger undefined ...

Flattr this!

A propos de Mathieu

Ingénieur développeur web dans la vente par correspondance B2B, adepte de nouvelles technologies et d'innovation. Vous pouvez aussi me retrouver sur Twitter @mathrobin
Cette entrée a été publiée dans En une minute, avec comme mot(s)-clef(s) , , , , . Vous pouvez la mettre en favoris avec ce permalien.
  • Nico

    Des bachibouzouques? Des ectoplasmes, des marins d’eau douce que dis-je, des flibustiers!! Sur certains wrapper, on trouve même document en plus dans les paramètres.

  • http://victorien.elvinger.fr/ Conaclos

    Quelle idée ont-ils eu d’utiliser le même caractère ^^
    Chrome Dev Tools utilise également ‘$’ (alias de ‘document.querySelector’ il me semble).

    Pour éviter le désagrément avec ‘undefined’ il est également possible d’utiliser ‘typeof’ :

    a.attribute !== undefined

    équivaut à :

    typeof a.attribute !== "undefined"

  • http://www.mathieurobin.com MathRobin

    Eh eh ouais déjà vu^^

    Précision : je n’ai pas voulu dire que Prototype ou Mootools sont pour les sagouins, mais ceux qui mettent au moins deux de ces frameworks en simultané le sont. Désolé si j’ai froissé quelqu’un…

  • jney

    ce n’est pas tant la surcharge de « undefined » qui est interessante avec ce pattern, mais plutot le fait que tu aides le minifier.

    • http://www.mathieurobin.com/ Mathieu

      Pas faux, il est vrai que ça a aussi cet avantage

  • rumpl

    Pour en plus éviter que le code ne fonctionne pas si on concatène notre fichier avec un fichier de quelqu’un d’autre qui ne mettrait pas de ‘;’, il faut utiliser ça :


    ;(function($, undefined){
    /*...*/
    })(jQuery);

    Noter le ‘;’ au début.

    • http://www.mathieurobin.com/ Mathieu

      Oui, ça fait partie de la protection de code. Perso, ma concaténation de fichier (tâche grunt bien entendu), ajoute automatiquement un ; à chaque fin de fichier 😉 Et donc intrinsèquement au début de chaque fichier.

Articles liés