閉包應用程式場景有:1、採用函數引用方式的setTimeout呼叫;2、小範圍代替全域變數;3、有權存取私有變數和私有函數的公有方法。
函數外部無法存取函數內部的局部變量,但函數內部的函數可以存取本函數內的局部變量,故透過閉包實現函數外部訪問函數內部局部變數。但容易造成記憶體洩漏,應謹慎使用。
閉包的使用情境:
1】、採用函數引用方式的setTimeout呼叫
setTimeout的第一個參數一般是一個即將要執行的函數,第二個參數是一個延遲時間。
如果一段程式碼想要透過setTimeout來調用,那麼它需要傳遞一個函數物件的參考來作為第一個參數,但這個函數物件的參考無法為將要延遲執行的物件提供參數。此時可以呼叫另一個函數來傳回一個內部函數的調用,將那個內部函數物件的參考傳遞給setTimeout函數,內部函數執行時需要的參數,在呼叫外部函數時傳遞給它,setTimeout在執行內部函數時無需傳遞參數,因為內部函數仍然能夠防偽外部函數呼叫時提供的參數。
2】、小範圍取代全域變數
3】、存取私有變數的特權方法?
特權方法:有權存取私有變數和私有函數的公有方法
私有變數包含:
1)、局部變數
2)、函數的參數
3)、函數內部定義的其他函數(閉包)
以上程式碼的建構函數中定義了兩個特權方法:getName()、setName(),這兩個方法可以透過物件訪問,而且都有權利存取私有變數name,但是在Person建構函式外部,沒有任何方法可以存取name。由於這兩個方法是在函數內部定義的,因此作為閉包能夠透過作用域鏈存取到name
推薦教程:《JS教程》
以上是閉包應用程式場景有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!