閉包とごみ回収メカニズムの関係について

8086 ワード

まずjsのメモリについてお話しします
jsでは,ごみ回収メカニズムはメモリ,どのようなデータが役に立たないデータ,役に立たないデータが破棄され,破棄されるのはどこのデータであるかを対象としている.
メモリはスタックとスタックに分けられ、スタックはシステム作成であり、スタックはプログラマが自分で作成し、メモリを合理的に使用できないと、メモリの漏洩を招く.
メモリの宣言サイクルについて説明します.
​ 1.必要なメモリを割り当てる、つまりスペースを割り当てる
​ 2.構成に必要なメモリ(読み取り、書き込み)を使用する
​ 3.不要な場合は、それを解放する(いわゆるゴミ回収メカニズム)
メモリの割り当てについて
まずシステムの自己分配であり,jsは変数を定義すると自動的に分配を完了する.例:
var n=123;//                 123
var str='123';//   str                 '123'
		
//    o            。 
//        
//        name            '  '
var o={
	name:'  '
}
		
//             
//   arr                   ;    
	var arr=[1,2,3];
		
//    (      )    
//   foo                 
//             (【   】         ,     )
function foo(a){
	return a+2
}

そして関数呼び出し割り当て空間
//              
	var date=new Date();//date     Date()            ;
		
	var str='dafrssedeb';
	var subStr=str.substr(0,4);//dafr   subStr       
		
//    
//  :              ,   
//  :          

上を見て、ごみの回収メカニズムを見てみましょう.
ごみ回収メカニズム
//   
//   :          
//     :              
// ---->               
//     :    ,           
		
//      :GO AO           
		
//         
// ---->   ,              (  )
//       :          
		
	var o={
		a:{
			b:2
		}
	}
	//     ,  key a    key b
	//        ,             ,         o
	//    ,           
		
		
    
    var o2 = o; // o2       “    ”        key a   
	o = 1;      //   ,“    ”    o2      ,“    ”     o    
		
	var oa = o2.a; //   “    ” a    key b   
		           //   ,“    ”      ,   o2,   oa
		
	o2 = "yo"; //                 ,        
		      //       a      oa  ,       
		
	oa = null; // a               
		      //          
				   
//   :         ,       ,       ,            (     )         

最後に、閉鎖とごみ回収メカニズム
タグクリアアルゴリズム
function foo(){
	var a=0;
	return function(){
		console.log(++a);
	}
}
var res=foo();//  res   return         ao   ,      
res();

//           
		
//         ,         ,    res,  foo AO         ,           
res=null;

// 
foo()();//                  ,