60 votes

Quel est le but de passer indéfini?

J'ai remarqué jQuery et liées keynote plugins comme jQuery.UI pass undefined comme paramètre dans les fonctions anonymes utilisés dans leur module de définitions, comme suit:

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

Sinon, j'ai remarqué d'autres plugins recommandés par jQuery et/ou les autres ne passent pas défini en tant que paramètre.

C'est probablement une question stupide, mais...

Ne devrait-elle pas toujours être à la disposition de toute façon? Pourquoi transmettre? Est-il une sorte d'autre but ou un truc qui se passe ici?

72voto

Christoph Points 23467

Il y a deux raisons à cela:

1) Depuis undefined est une propriété de l'objet global, sans protection contre l'écriture, il peut être surchargé, ce qui peut entraîner dans l'étrange et le comportement inattendu lorsque vous essayez ceci: ( var == undefined).

Par le fait d'avoir un argument de fonction undefined (le nom n'a pas d'importance) qui vous ne passez pas d'un paramètre, vous assurez-vous d'avoir une variable qui est vraiment undefined de sorte que vous pouvez tester "undefinedness" à l'encontre de cette variable.

Btw. la méthode la plus sûre pour tester undefined est: typeof ( var ) === 'undefined'

EDIT: Avec l'adoption de EcmaScript 5, undefined, NaN et Infinity sont maintenant en lecture seule dans tous les navigateurs modernes - bien sûr, à l'exception d'Internet Explorer jusqu'à la Version 9 :(. Donc, ce n'est plus nécessaire, cependant:

2) Depuis undefined est maintenant un nom de variable dans cette fonction du champ d'application plutôt que d'un objet global de la propriété, minifiers peut réduire à une seule lettre pour ainsi obtenir un meilleur taux de compression sur le minifiés fichier.

17voto

Christofer Eliasson Points 16563

C'est fait pour s'assurer que indéfini, toujours est - undefined. En JavaScript, depuis indéfini n'est pas un mot réservé, mais régulier, une variable, cela serait permis par exemple:

undefined = 2; // Assign a different value to undefined

// Now this statement would be true
if (undefined == 2)

Donc, assurez-vous que l'indéfini est en fait défini, même si certains "mauvais" script aurait réaffectés pas défini avec une autre valeur, vous créez un paramètre que vous appelez indéfini, puis lorsque vous appelez la fonction, vous assurez-vous de ne pas transmettre une valeur de ce paramètre - donc vous pouvez être sûr que la variable indéfinie sera toujours pas défini au sein de votre fonction.

Ainsi, dans le cas de jQuery:

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

Ils passent en jQuery et de l'affecter à la variable $ pour plus de commodité, mais ils ne pas passer une deuxième valeur du paramètre non défini, donc pas défini ne sera pas défini.

10voto

jbabey Points 20696

undefined n'est pas un mot réservé en javascript, c'est simplement une variable. jQuery s'assure que si un mauvais développeur écrase la valeur de indéfini dans son javascript, alors jQuery l'ignorera et établira sa propre variable, indéfinie, qui ne sera jamais transmise une valeur (voir l'auto-exécution (jQuery) à la fin) et est donc réellement indéfini.

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