7 votes

Pourquoi dois-je passer l'objet fenêtre dans le modèle de module ?

Voici une méthode anonyme auto-exécutoire.

Il semble que ce soit une bonne pratique de passer la fenêtre comme globale. Si la fenêtre est déjà disponible partout, pourquoi le faire ?

(function (global) { 

 /* my code */ 

 global["someName"] = someObject; 

})(window);

6voto

T. Stone Points 10782

Cela évite au code d'avoir à effectuer une recherche de portée puisque global a une portée à l'intérieur de la fonction.


Edit -- C'est une optimisation des performances. Le scoping en javascript est limité à la portée des fonctions. global dans ce cas, est défini dans cette portée, donc quand le code frappe global[...] il regarde son champ d'application immédiat (dans la fonction) et trouve global tout de suite. Sans cela, il devrait alors passer à l'étendue de la fermeture, qui dans ce cas est l'espace de nom global de javascript, et rechercher dans cette étendue entière les éléments suivants window .

2voto

Dan Herbert Points 38336

L'interprète JavaScript du navigateur doit déterminer la portée de toutes les variables qu'il trouve, en commençant par la portée la plus locale et en allant vers l'extérieur. L'utilisation d'une fermeture de fonction avec window comme paramètre global réduit la nécessité d'aller plus loin dans la chaîne de portée pour trouver window .

window es disponible partout, mais en utilisant global la façon dont elle est dans votre exemple est plus performante.

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