javascript fermeture avantages?
Quel est le but principal de Fermetures en JS. Est-il seulement utilisé pour le public et le privé variables? ou est-il autre chose que j'ai manqué. J'essaie de comprendre de fermeture et que vous voulez vraiment savoir quels sont les principaux avantages de l'utilisation.
Je recommande la lecture de jibbering.com/faq/notes/closures sauf si vous avez de la difficulté à saisir l'explication.
OriginalL'auteur Jay | 2011-06-10
Vous devez vous connecter pour publier un commentaire.
Je pense que la meilleure phrase pour résumer le but de fermetures serait:
Encapsulation Des Données
Avec une fonction de fermeture, vous pouvez stocker des données dans un autre champ d'application, et de les partager uniquement en cas de besoin.
Si vous voulait imiter
private static variables
, vous pouvez définir une classe à l'intérieur d'une fonction et de définir laprivate static vars
au sein de la fermeture:il n'y a plus qu'un but, celui de la fermeture. La persistance de domaine est la partie de l'encapsulation des données. Je ne serais même pas être si étroite qu'-à-dire
local scope
.Dans ma tête toute la portée est locale à quelque chose, donc tous ses locaux. peut aswell baisse et que dire de la portée. Votre style de codage est intéressant.
je considère
local scope
pour être le plus intime de la portée d'une fonction particulière. Si de multiples fermetures sont utilisés, vous maintenir la portée de tous, et pas seulement les plus intimes.OriginalL'auteur zzzzBov
Fermetures d'avoir à faire avec la façon dont le javascript est étendue. Pour le dire d'une autre manière, à cause de la détermination de la portée de leur choix (c'est à dire une portée lexicale) le javascript concepteurs de fait, les fermetures sont possibles.
L'avantage de fermetures en javascript, c'est qu'il vous permet de lier une variable à un contexte d'exécution.
dans cet exemple, vous avez un objet normal littérale appelé
closedIn
. Il est accessible dans une fonction. À cause de cela, javascript sait qu'elle doit apporterclosedIn
partout, il apporte de la fonctionf
, de sorte qu'il est disponible àf
.La
this
mot-clé est délicate.this
est toujours une référence à la portée d'exécution. Vous pouvez capturer l'this
d'un contexte à l'utiliser dans un autre contexte comme suit:Cette astuce peut être très utile somethings, si vous êtes le codage orienté objet, javascript et que vous souhaitez un rappel pour avoir accès à une portée externe.
Pour citer un Javascript livre:
Donc l'avantage est que vous pouvez porter n'importe quel objet (les fonctions, les objets, etc) ainsi que le champ d'application de la chaîne d'aussi loin que nécessaire. C'est peut être aussi considéré comme un risque, parce que vos applications peuvent facilement consommer beaucoup de mémoire si vous n'êtes pas prudent.
tout à fait raison.
Comme quelqu'un qui est en train de faire la grosse javascript single page application. J'ai besoin d'utiliser des fermetures à sauvegarder "le contexte" TOUT LE TEMPS. Si vous utilisez jquery par exemple lorsque vous liez une fonction à un événement pour le mot clé "this" est lié à l'élément HTML qui a déclenché l'événement, changer le contexte à l'intérieur.
OriginalL'auteur hvgotcodes
Fermetures sont nécessaires en javascript en raison du fait que la plupart des API qui nécessitent des fonctions de rappel (par exemple, un "onclick" fonction) ne fournissent pas d'autres mécanismes pour envoyer des paramètres de ces fonctions de rappel (ou à définir explicitement le pointeur "this"). Au lieu de cela, vous avez besoin d'utiliser des fermetures pour permettre à la fonction de rappel pour accéder à des variables dans le "parent" de la fonction.
Personnellement, je souhaite qu'ils n'étaient pas nécessaires, car ils peuvent être difficiles à comprendre, de les rendre difficiles à lire le code (il n'est pas toujours clair ce qui est exactement dans le champ d'application), et de faire bizarre de bugs. Au lieu de cela je souhaite qu'il y ait un standard pour les rappels qui vous a permis de vous envoyer des paramètres, etc. Mais je reconnais que je suis dans la minorité dans cette vue.
Je comprends comment ils fonctionnent, et oui j'ai fait différentes choses pour les rappels au sein de ma propre api pour les nettoyer, mais pour la mise en place, par exemple, un DOM onclick, vous êtes assez bien obligés d'utiliser une fermeture si vous voulez éviter les variables globales ou des chaînes de caractères à transmettre de l'information.
Je ne vois pas comment les fermetures de faire de dur à lire le code, ou pourquoi ils sont difficiles à comprendre. Le champ d'application de la fermeture est très clair: c'est (lexicalement) lié au champ d'application dans lequel il a été défini. Bizarre bugs viennent à propos pour cause de mauvais code ou avec des fermetures de ne pas être correctement utilisé (en raison d'un manque de compréhension de la façon dont ils travaillent).
Eh bien, j'ai appris le javascript, et les gens se confondre. Sûr que c'est par manque de compréhension, mais même si vous et moi peut les comprendre, il est exceptionnellement concept difficile pour les débutants. Par exemple: stackoverflow.com/questions/3273210/... (et notez que mozilla a même un propriétaire "laisser" mot-clé pour aider ici....beurk!)
OriginalL'auteur rob