對JS閉包的簡單理解,一學就會,一敲就廢

2021-10-09 22:57:26 字數 1327 閱讀 1215

閉包的定義:

閉包是指有權訪問另乙個函式作用域中的變數的函式。

閉包的特點:

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函式內部...