Passage d'undefined à des expressions de fonction appelées immédiatement JavaScript

Parfois, vous pouvez repérer l'ancien code dans la nature oùundefinedest passé à une fonction. Pourquoi?

J'ai découvert cette petite astuce en regardant le célèbreVidéo de Paul Irish sur le code source de jQuery.

Cette vidéo vient d'une autre époque et elle a 9 ans au moment de l'écriture, et le code source de jQuery a changé depuis, donc vous ne pouvez pas repérer cette chose là-dedans, mais c'est toujours quelque chose que j'ai trouvé intéressant.

De plus, JavaScript a changé depuis. Cette technique ne s'appliquait qu'au JavaScript pré-ES5.

Avant ES5, sorti en 2009, c'était une étape presque obligatoire.

Remarque: les bases de code ES5 + n'ont plus besoin de l'ajouter car maintenantundefinedest une valeur en lecture seule.

Parfois, dans notre code, nous vérifions les variables pour voir si elles ne sont pas définies, de cette manière:

if (car !== undefined) {

}

Si c'est notre code, qui s'exécute sur nos propres serveurs, que nous contrôlons, cela devrait fonctionner correctement. Mais imaginez qu'une bibliothèque comme jQuery doit être testée au combat, pour fonctionner sur tous les sites possibles.

Si quelqu'un écraseundefinedavec un simple

undefined = '🤔' //whatever value you prefer

puis le dessusiféchouerait, comparantcarà🤔.

Cela a depuis été corrigé dans ES5, mais était possible avant cela.

Sicarétait en fait indéfini, il n'y avait aucun moyen de le savoir maintenant.

Sauf en utilisant cette technique: nous enveloppons tout notre code dans un IIFE (Expression de fonction immédiatement invoquée) et nous passons un paramètre à la définition de la fonction, sans l'ajouter dans la phase d'appel.

(function() {
  /* our function code */
})()
(function(undefined) {
  /* our function code */
})()

Voir,undefinedest passé en argument, mais pas en paramètre lorsque nous appelons la fonction. Donc, à l'intérieur de la fonction, la valeur de la variableundefinedest (garantie) la valeur d'origine deundefined. Peu importe ce que font les autres scripts de la page, il est isolé.

Maintenant, ma façon préférée de résoudre ce problème est d'utiliser cette technique pour vérifier les valeurs non définies:

if (typeof car !== 'undefined') {

}

LetypeofL'opérateur renvoie une chaîne avec le type d'une variable. Nous pouvons le comparer à la'undefined'string, et nous n'aurions pas le problème ci-dessus en premier lieu.

Mais il est toujours bon de connaître les raisons de certaines choses que vous pouvez lire sur du code écrit par d'autres, en particulier lorsque c'est du code au niveau de la bibliothèque qui doit s'exécuter partout.

Téléchargez mon gratuitManuel du débutant JavaScript


Plus de tutoriels js: