首頁 >web前端 >js教程 >js閉包是什麼

js閉包是什麼

青灯夜游
青灯夜游原創
2019-05-17 12:28:433084瀏覽

閉包就是能夠讀取其他函數內部變數的函數。由於在javascript中,只有函數內部的子函數才能讀取局部變量,所以閉包可以理解成「定義在一個函數內部的函數」。在本質上,閉包是將函數內部和函數外部連接起來的橋樑。

js閉包是什麼

JavaScript閉包

#在JavaScript中允許函數定義和函數表達式位於另一個函數的函數體中(內部函數),而且內部函數可以存取它們所在外部函數聲明中的所有局部變量,參數以及其他內部函數。當其中一個內部函數被外部函數以外呼叫時就會形成閉包

閉包的三大特點為:

1、函數巢狀函數

2、內部函數可以存取外部函數的變數

3、參數和變數不會被回收。

閉包的用途

閉包可以用在許多地方。它的最大用處有兩個,一個是前面提到的可以讀取函數內部的變量,另一個就是讓這些變數的值始終保持在記憶體中。

使用閉包的注意點

1)由於閉包會使得函數中的變數都保存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體外洩。解決方法是,在退出函數之前,將不使用的局部變數全部刪除。

2)閉包會在父函數外部,改變父函數內部變數的值。所以,如果你把父函數當作物件(object)使用,把閉包當作它的公用方法(Public Method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變數的值。

總結:

1、閉包是指有權存取另一個函數作用域中的變數的函數,而建立閉包的最常見的方式就是在一個函數內建立另一個函數,透過另一個函數存取這個函數的局部變數。閉包的缺點就是常駐內存,會增加內存使用量,使用不當很容易造成內存洩漏。

2、不必糾結到底怎樣才算閉包,其實你寫的每一個函數都算作閉包,即使是全域函數,你訪問函數外部的全域變數時,就是閉包的體現。

以上是js閉包是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:NW.js是什麼?下一篇:NW.js是什麼?