Javascriptにおけるreturnの使用とクローズドの詳細解

3026 ワード

前言
Javascriptにおけるクローズドは、多くの変数とこれらの変数が結合された環境を持つ表現であり、これらの変数もこの表現の一部である.return文はjsの中で重要な役割を果たしています.このキーワードはリターン関数だけではなく、特殊な使い方もあります.Javascriptの中のreturnの使用とクローズドについて詳しく紹介してみましょう.
一、リセットの使用
ケース1:

var a=1;

for(var b=0; b<10; b++){

 return b;

};

sonsole.log(b)//    
個人はここの左右と全体として考えていますが、return後のコードは全部実行されません.
ケース2:

var a=1;

function bb(){

 for(var b=0;b<10;b++){

 return b;

 };

};

console.log(bb);//  0
二、連鎖作用域と閉包
まず一つのケースを見ます.

var a=1;
function f1(){
 var b=2;
 function f2(){
 console.log(a);//1
 console.log(b)//2
 };
};
上のコードでは関数f 1の内部に関数f 2が含まれています.このとき、f 1内部のすべての局所変数は、f 2に対して見られます.しかし、逆にだめです.f 2内部の局部変数は、f 1に対しては見えません.これはJavascript言語特有の「連鎖作用領域」構造です.
パッケージを閉じます:はっきり言って、1つの方式を利用して局部変数にアクセスする機能を実現します.
Javascript言語では、関数内部のサブ関数だけが局所変数を読み取ることができるので、クローズドを単に「関数の内部に定義された関数」と理解することができます.
したがって、本質的には、クローズドとは、関数の内部と関数の外部をつなぐ橋のことである.

function f1(){
 var a=1;
 function f2(){
 alert(a);
 };
 return f2
};

console.log(f1());//function f2(){alert(a);};
console.log(f1()());//  1
だから普通はこのように書くことができます.

function f1(){
 var a=1;
 function f2(){
 alert(a);
 };
 return f2
};

var result=f1();
console.log(result());//  1
完全なケースを閉じます.

function f1(){

 n=999;

 function f2(){
   alert(n);
  }

    return f2;
}

var result=f1();

result(); // 999
今は、f 2を介して、アクセスf 1の局所変数nを実現することができます.
クローズド効果:一つは前に述べた関数内部の変数を読み取ることができ、もう一つはこれらの変数の値を常にメモリに保持させることです.

function f1(){
 var a=222;
 f2=function(){//       ,    var      ,           ;
 alert(a);
 };

};


f1()// 
f2()//222,          



function f1(){
 var a=222;
 function f2(){//     
 alert(a);
 };
 nAdd=function(){a+=1};
 return f2
};

var obj=f1();
obj()//222

nAdd()// 
obj();//223,      f1      a        ,    f1        
どうしてですか?f 1はf 2の親関数であり、f 2はグローバル変数を与えられ、f 2は常にメモリにあり、f 2の存在はf 1に依存しているため、f 1も常にメモリにあり、呼び出しが終了した後、ゴミ回収メカニズムによって回収されることはない.
このコードのもう一つの注目すべき点は、「nAdd=function(){n+=1}」行であり、まずnAddの前にvarキーワードが使用されていないため、nAddは局所変数ではなくグローバル変数である.次に、nAddの値は匿名関数であり、これは
匿名関数自体もクローズドなので、nAddはsetterに相当し、関数の外部で関数内部の局所変数を操作することができる.
クローズドを使う注意点
1)クローズドは関数の変数がメモリに保存されるため、メモリの消耗が大きいので、クローズドを濫用してはいけません.そうでないと、ウェブページの性能問題が発生し、IEでメモリのリークを引き起こす可能性があります.解決方法は、関数を終了する前に使用しないローカル変数をすべて削除します.
2)親関数の外部で、親関数の内部変数の値を変更します.したがって、親関数を対象として使用する場合は、クローズドをそのパブリックメソッドとして、内部変数をそのプライベート属性として扱わないように注意してください.
締め括りをつける
以上はこの文章の全部の内容です.本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです.もし疑問があれば、メッセージを残して交流してもいいです.