js閉包小實驗

2022-03-24 02:22:55 字數 1436 閱讀 6085

閉包中引用閉包外的變數會使他們常駐記憶體

function

foo()

}

|||-begin

function

foo()

}var f1=foo();

var f2=foo();

f1();//0

f1();//

1f1();//

2f2();//

0f2();//

1f1();//

3f2();//

2

|||-end

foo中的閉包函式引用了foo中的變數i,導致foo和變數i都常駐記憶體

i++是先賦值後加,所以返回的是+1之前的值

var f1=foo(); 和 var f2=foo(); 表示f1和f2指向不同的foo()例項

1

function

foo() 6}

7var f1=foo();

8var f2=foo();

9 f1();//

010 f1();//

111 f1();//

212 f2();//

013 f2();//

114 f1();//

315 f2();//

2

出現這樣結果的原因是因為 閉包 ,在foo函式裡面的 閉包 用了foo中的變數 i,所以 這個i及foo函式常駐記憶體,沒有被釋放

第7行的var f1=foo();

和第八行的 var f2=foo();

會導致 f1和f2指向不同的 foo()例項

第9行第一次f1()的時候 i的 值 是 i++(先賦值後加)   所以結果是0,此時 i的值為1

所以第10行的結果是1

第12行的f2(),因為和f1()指向不同的foo()例項,所以值是0

6第8行的var f2=f1;

導致 f1和f2指向了同乙個 foo()例項,又因為 foo中的閉包應用foo的變數i,導致他們常駐記憶體,所以 結果就是如上

閉包小案例

閉包可以用在許多地方。它的最大用處有兩個,乙個是可以讀取函式內部的變數,另乙個就是讓這些變數的值始終保持在記憶體中。閉包的應用涉及作用域 函式的引數傳遞 變數提公升等知識,當迴圈使用時,通過畫圖的方式可以更好的去理解。以下的這段 n 只有1級引用 function fun n,s var a fun...

說說js閉包

js閉包涉及到作用域,js的作用域有兩種,全域性變數和區域性變數,全家變數就是在函式外宣告的,區域性變數是在函式內宣告的,函式內部可以直接讀取全域性變數 但是函式外部自然無法讀取函式內的區域性變數 函式內部宣告變數的時候,要用var不然就是個全域性變數 有時候需要得到函式內的區域性變數 濫用閉包會可...

JS閉包理解

下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...