全局變數和局部變數 1 var a=1; //全局變數 2 function fun() { 3 var a=2; //局部變數 4 b=1; //全局變數 5 alert(a); //2 6 } 7 alert(a); //1 8 alert(b); //1 JS中函數內是可以直接讀取全局變數,而 ...
全局變數和局部變數
1 var a=1; //全局變數 2 function fun() { 3 var a=2; //局部變數 4 b=1; //全局變數 5 alert(a); //2 6 } 7 alert(a); //1 8 alert(b); //1
JS中函數內是可以直接讀取全局變數,而函數外部是無法讀取函數內的局部變數的
閉包
閉包就是能讀取另一個函數內部變數的函數,可以簡單的理解為定義在一個函數內部的函數 本質上,閉包就是將函數內部和函數外部鏈接起來的一座橋梁1 function f1(){ 2 var n=1; 3 function f2(){ 4 alert(n); 5 } 6 return f2; 7 } 8 //alert(n); 9 var result=f1(); 10 result(); // 1
js語言的“鏈式作用域”,子對象會一級一級的向上尋找所有父對象的變數,所以,父對象的所有變數對子對象都是可見的。因為f2可以讀取f1中的局部變數,所以只要把f2作為返回值就可以在f1外部讀取它的內部變數。
閉包的用途
1、讀取函數內部的變數 2、讓這些變數的值始終保持在記憶體中1 function f1(){ 2 var n=1; 3 Add=function(){ 4 n+=1; 5 }; 6 function f2(){ 7 alert(n); 8 } 9 return f2; 10 } 11 //alert(n); 12 var result=f1(); 13 result(); // 1 14 Add(); 15 result(); // 2
result實際就是閉包函數f2,一共被執行了兩次。第一次是1,第二次是2 。這說明局部變數n一直都在記憶體里,因為f1是f2的父函數,f2被賦值給一個全局變數,這導致f2始終都在記憶體中,而f2的存在依賴f1,因此f1也始終都在記憶體中。