參考https://tylermcginnis.com/async-javascript-from-callbacks-to-promises-to-async-await/
閉包定義-是指有權通路另一個函數作用域中的變量的函數。
讓這些變量的值始終保持在記憶體中。
閉包就是能夠讀取其他函數内部變量(局部變量)的函數
使用場景——函數作為傳回值,函數作為參數傳遞。
傳回值
參數傳遞上面的寫法其實是最原始的寫法,而在實際應用中,會将閉包和匿名函數聯系在一起使用
形成閉包要符合這三個條件,而且三者缺一不可:
- 1、函數A内部直接或間接傳回一個函數B
- 2、B函數内部使用着A函數的私有變量
- 3、A函數外部有一個變量接收B函數
閉包主要的三個特點
- 1、延長了變量的生命周期;這個特點的好處就是變量會一直存在,
- 是以也成了一個緻命的缺點:就是這個函數的執行空間不會被銷毀,而當一段記憶體空間中有一個不會被銷毀的東西一直存在,就會出現記憶體占用,如果過多的話,還會導緻記憶體溢出,結果引起記憶體洩漏。
- 2、可以通路函數内部的私有變量;利用這個特點,我們可以在函數外部通路到内部的資料。
- 3、保護私有變量;這是所有函數都具備的特點之一,普通函數的内部變量是不能在外部通路的,但是閉包空間可以。
匿名函數主要有兩種常用的場景,一是回調函數,二是直接執行函數。
()()這種寫法可以說是匿名函數的調用或者叫立即執行函數。
<script language="javascript">
var a = "a";
(function(){
var a="b";
alert(a);
})();
alert(a);
</script>
Function 對象是JavaScript 裡面的固有對象,所有的函數實際上都是一個Function 對象。
var abc = new Function("x","y","return x*y;");
alert(abc(2,3)); // "6"
聲明匿名函數---匿名函數就是沒有實際名字的函數。
var abc=function(x,y){
return x+y;
}
alert(abc(2,3)); // "5"
立即執行函數:形如 (function(){})(); 的一類函數;
立即執行函數的兩種寫法
- (function(){}()); W3C 建議第一種
- (function(){})();
出處:轉載請注明 https://www.cnblogs.com/sun-null/