閉包及其應用場景

Caroline靜默如初發表於2018-08-27

  函式外部無法訪問函式內部的區域性變數,但函式內部的函式可以訪問本函式內的區域性變數,故通過閉包實現函式外部訪問函式內部區域性變數。但容易造成記憶體洩漏,應當謹慎使用。

閉包的使用場景:

1】、採用函式引用方式的setTimeout呼叫

setTimeout的第一個引數一般是一個即將要執行的函式,第二個引數是一個延遲時間。

如果一段程式碼想要通過setTimeout來呼叫,那麼它需要傳遞一個函式物件的引用來作為第一個引數,但這個函式物件的引用無法為將要被延遲執行的物件提供引數。此時可以呼叫另一個函式來返回一個內部函式的呼叫,將那個內部函式物件的引用傳遞給setTimeout函式,內部函式執行時需要的引數,在呼叫外部函式時傳遞給它,setTimeout在執行內部函式時無需傳遞引數,因為內部函式仍然能夠防偽外部函式呼叫時提供的引數。

2】、小範圍代替全域性變數

3】、訪問私有變數的特權方法?

特權方法:有權訪問私有變數和私有函式的公有方法

私有變數包括:

       1)、區域性變數

       2)、函式的引數

       3)、函式內部定義的其他函式(閉包)

以上程式碼的建構函式中定義了兩個特權方法:getName()、setName(),這兩個方法可以通過物件訪問,而且都有權訪問私有變數name,但是在Person建構函式外部,沒有任何方法可以訪問name。由於這兩個方法是在函式內部定義的,因此作為閉包能夠通過作用域鏈訪問到name

相關文章