Une expression de fonction anonyme auto-invoquant
(function(){ ... })();
J'AI regardé cette post et compris un peu plus sur elle. Mais il y a peu de plus de doutes, surtout sur la façon dont il est utilisé.
Comme un bloc Statique!
car elle agit comme un statique bloc (auto invoquant!), il peut être utilisé pour l'initialisation(à l'instar de certains faire-croire constantes)?
Mais il n'est pas getter
disponible pour aller chercher quelque chose de lui et l'utiliser ailleurs!
retour, Doit?
La solution ci-dessus est d'AVOIR un return
dans cette fonction? afin que je puisse chercher de quoi il retourne et l'utiliser.
référence à l'objet global?!
(function(window, undefined){})(this);
L'explication pour le code ci-dessus a été dans la deuxième réponse de l'référencé postje ne pouvais pas le comprendre, Si quelqu'un peut l'expliquer plus (ou plus simple pour moi), Ça va être super
mise à jour: Prendre un coup d'oeil à ce code ↓
var myElement=document.getElemetById("myElementId");
(function(myElement){
/**'this' here is 'myelement'???**/
};
})(this);
source d'informationauteur rps
Vous devez vous connecter pour publier un commentaire.
Une commune metod est le suivant (appelé namespacing) - Il a créé un encapsulé portée par immédiatement l'exécution de votre fonction et renvoie les parties essentielles dont vous avez besoin dans votre variable:
Cette façon, vous avez accès à tout ce dont vous avez besoin par le biais de votre
yourNamespace
variable, tout en continuant à maintenir la confidentialité et de ne pas polluer l'objet global. Il est appelé namespacing et utilise la fermeture de paradigme. Vous pouvez également la main sur les fonctions pour travailler avec le secteur privé (pour l'affichage de la portée de la non-visible) variables.Une raison pour céder undefined était, que, dans l'ES3 undefined était en écriture, qui n'est pas le cas aujourd'hui dans l'ES5. Remise sur
this
comme paramètre raccourcit la recherche par la création d'une référence directe à la globalwindow
objet dans le champ d'application. Toutefois, soyez très prudent, dans l'ES5 mode strictthis
n'est pas la fenêtre mais se résout àundefined
!! Ce n'est donc pas recommandé!Une autre raison pour la remise de la fenêtre et de l'indéfini, c'est que maintenant que ce sont des noms de variables, un minifier peut les compresser pour une seule lettre.
MODIFIER à votre question:
La
this
ne changera pas dans votre exemple, vous avez besoin d'une des solutions suivantes:Le point principal d'un iife est de créer un encapsulé portée. Sinon, toutes les variables que vous déclarez finira dans la portée globale.
Si vous avez besoin de faire quelque chose d'accessible à partir de l'intérieur de ce champ, vous pouvez créer explicitement un espace de noms global variable c'est à dire
window.myApp = {}
et l'attacher là, c'est à direwindow.myApp.myMethod = function(){...}
La raison pour le passage de
window
dans le iife, c'est qu'il crée une référence locale dans le champ d'application. Qui sera de raccourcir la chaîne de recherche pour améliorer les performances et la variable sera également minifiable.En réponse à la mise à jour de votre question:
Pour créer un local de ref à un élément à l'aide de ce modèle vous offre à la iife comme argument:
...mais je ne suis pas sûr qu'il y a beaucoup de valeur à l'aide du modèle de cette façon?
Comme pour mon commentaire, le
this
mot-clé n'est pas affecté et sera toujours le point dewindow
dans cet exemple.Je pense que le
this
mot-clé est déroutant vous - il n'est pas nécessairement à l'iife modèle.Voici une bonne explication de la façon dont sa valeur est déterminée:
http://net.tutsplus.com/tutorials/javascript-ajax/fully-understanding-the-this-keyword/
> il peut être utilisé pour l'initialisation? ... il n'y a pas de getter disponible pour aller chercher quelque chose de lui!
oui, il est souvent utilisé pour l'initialisation et il n'est pas nécessaire d'aller chercher quelque chose si elle pourrait.
> La solution ci-dessus est d'AVOIR un retour?
non, il n'ont pas à avoir un retour mais il. Si il y a un retour, il sera passé à autre... c'est à dire
a
aura quelle que soit retourné ou non.paramètre ce sera l'invocateur - il est généralement fenêtre , mais peut-être n'importe quel objet.
si vous passer cela comme un paramètre, il sera accessible à partir du 1er argument ( fenêtre dans le cas).
Espère que les explications sont assez claires.