閉包的定義:
閉包是指有權訪問另乙個函式作用域中的變數的函式。
閉包的特點:
1.函式中巢狀函式
2.函式內部可以引用函式外部的變數和引數
閉包的缺點:
閉包比普通函式占用的記憶體更大, 所以在不用的時候要關掉
常見的閉包函式
for
(var i=
0; i<
5;i++),
1000);
}
列印結果是: 5個5
其實這就是比較典型的閉包造成的;因為定時器是處於非同步的;而for迴圈是同步的;js的單執行緒執行機制;所以會先執行完迴圈以後再執行非同步**;就導致 i 輸出的結果都是5
解決辦法:
方法一 閉包:
for
(var i=
0; i<
5;i++),
1000)}
)(i)
;// 把 i 傳進去
}
列印結果:01234
方法二: let
for
(let i=
0; i<
5;i++),
1000
)}
列印結果:01234
閉包函式:
functionfn(
)return status
}return foo
}let son =fn(
)let timer =
setinterval((
)=>
,1000
);
輸出結果:12
345undefined
當滿足條件清除定時器後 輸出的最後結果為undefined ; 先說說原因吧! 因為在定時器中呼叫的函式; 當函式滿足條件清除定時器的時候; 定時器還是會執行當前的這個狀態;而此時函式是沒有返回值得;所以就是undefined; 解決辦法就是 在定時器中判斷 ;如果定時器返回的值是undefined就 return出去
functionfn(
)else
}return foo
}let son =fn(
)let timer =
setinterval((
)=>
,1000
);
對js閉包的理解
在w3c和網上其他地方看了一下閉包,記錄一下個人理解。個人認為,閉包就是乙個函式內包含另乙個函式 然後函式外可以呼叫另乙個函式內的變數或函式返回值。看到這,大家都會覺得。還要你說,傻子都知道。但是,事實就是如此,來段 window.onload function function doreduce ...
對閉包的簡單理解
閉包是乙個特別抽象的概念,所以本文不會對概念進行解釋。直接寫例子 需要對賦值 程式的執行 返回值有一定的理解 當然本文只是個人對閉包的淺顯的理解,希望能夠對你有所幫助。function fun return funsub var fn fun 執行fun函式,並將funsub函式的位址賦值個fn。f...
乙個JS菜鳥對閉包的理解
閉包就是能夠讀取其他函式內部變數的函式,在js中,只有函式內部的子函式才能讀取區域性變數,這就造成的一些使用時的不便。而閉包函式的作用就是,像一座橋梁一樣將函式內部和函式外部連線起來。可以保護變數,避免汙染。函式a內部直接或間接返回乙個函式b b函式內部使用函式a內部的私有變數 私有資料 a函式內部...