Maison  >  Article  >  interface Web  >  Introduction aux fermetures dans les astuces JavaScript_javascript

Introduction aux fermetures dans les astuces JavaScript_javascript

WBOY
WBOYoriginal
2016-05-16 16:09:151229parcourir

La soi-disant fermeture doit faire référence à : la fonction interne lit les variables en dehors de la fonction actuelle, c'est-à-dire le contexte dans lequel elle a été créée.

Copier le code Le code est le suivant :

fonction bonjour(){
var char = "bonjour, le monde";
Fonction print(){
console.log(char);
};
Retourner print();
>

Il convient de noter que la fonction print fait ici référence à la variable char de la fonction hello externe, nous pouvons donc ici renvoyer un
Copier le code Le code est le suivant :

bonjour le monde

En un sens, cette fonction devrait être attribuée au champ d’application. Bien entendu, nous n’avons aucun moyen d’accéder directement à char, sauf en cas d’erreur lorsque nous déclarons cette variable. Comme
Copier le code Le code est le suivant :

fonction bonjour(){
char = "bonjour, le monde";
Fonction print(){
console.log(char);
};
Retourner print();
>

Tout simplement parce qu'il manque une variable.

Copier le code Le code est le suivant :

Ici, le bonjour devient une clôture. Les fermetures sont un type d’objet particulier. Il se compose de deux parties : la fonction et l'environnement dans lequel la fonction est créée. L'environnement se compose de toutes les variables locales qui étaient dans la portée lors de la création de la fermeture.

Fermeture Javascript et ça

Il est à noter qu'il peut y avoir des problèmes lors de la lecture de ceci et des arguments.

Copier le code Le code est le suivant :

fonction bonjour(){
This.char = "bonjour, le monde";
Sortie de fonction(){
         char = "Je ne suis pas bonjour tout le monde";        
         console.log(this.char);
};
Renvoie la sortie();
>

Bien sûr, cet exemple n'est pas assez approprié, nous avons donc besoin d'un exemple supplémentaire pour expliquer ce problème. Voici un exemple de "Javascript Advanced Programming" pour illustrer ce problème.
Copier le code Le code est le suivant :

var name = "La fenêtre";

var objet = {
nom : "Mon objet",

getNameFunc : function(){
        fonction de retour(){
              return this.name;
>
>
};
objet.getNameFunc()()


C'est juste que cet usage est réel, et la solution est de sauvegarder une variable temporaire qui, comme mentionné dans l'article "Quelques connaissances à ce sujet en Javascript".

Copier le code Le code est le suivant :

var name = "La fenêtre";
var objet = {
nom : "Mon objet",

getNameFunc : function(){
        var ça = ceci ;
         fonction de retour(){
              return that.name;
>
>
};
objet.getNameFunc()()


Javscript 閉包與讀寫變數
值得注意的是,如果我們沒有處理好我們的變數時,我們也可以修改這些變數。
複製程式碼 程式碼如下:

function hello(){
    var char = "hello,world";
    return{
        set: function(string){
            return char = string;
        },
        print: function(){
            console.log(char)
        }
    }
}
var say = hello();
say.set('new hello,world')
say.print() // new hello world

Javascript 閉包與效能

引用MDC的說法

複製程式碼 程式碼如下:

 如果不是因為某些特殊任務而需要閉包,在沒有必要的情況下,在其它函數中創建函數是不明智的,因為閉包對腳本性能具有負面影響,包括處理速度和內存消耗。

文上還說到。
複製程式碼 程式碼如下:

 例如,在建立新的物件或類別時,方法通常應該關聯於物件的原型,而不是定義到物件的建構器中。原因是這將導致每次構造器被調用,方法都會被重新賦值一次(也就是說,為每個物件的創建)。
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn