回撥函式 與 函式閉包
回撥函式
1.什麼是回撥函式?
作為引數的函式就是回撥函式!
例如:有兩個函式A,B如果函式A作為B的一個引數傳入B的話,那麼我們就稱A是回撥函式。
//宣告一個函式
function fn1(a){
a()
}
//再宣告一個函式作為fn1函式的引數傳入
function fn2(){
alert('我是一個回撥函式')
}
fn1(fn2)
例子中的fn2就被稱為一個回撥函式
2.回撥函式的用途
一般是某個行為或某件事之後的收尾處理,或者說對於不同行為結果,給出不同響應。
閉包【返回一個函式的函式】
1.為什麼會產生閉包
函式作用域中宣告的變數,在全域性作用域下是無法進行訪問的,但有時候我們又需要在全域性中去訪問函式內的變數,這個時候我們就需要用到閉包。
2.什麼是閉包
在函式A中,再定義一個函式a,用子函式a去控制父函式A中的變數,呼叫父函式A時,將子函式a返回給呼叫者,這就稱之為閉包。
//定義一個父函式
function A(){
var i = 1
//定義一個子函式輸出父函式中的變數i
return function a(){
console.log(i)
}
}
A()() //此處呼叫一次A函式返回的是一個函式a所以需要在呼叫一次,所以有兩次呼叫()
3.閉包的用途
1).可以讓父級作用域訪問到函式中的變數
2).可以讓這些變數的值始終保持在記憶體中
//宣告一個函式
function boss(){
var n = 100
//建立一個子函式,接收一個新的引數
function child(newV){
//對傳入的引數進行判斷,如果沒傳入新引數返回原來的n值,傳入則返回新值
n = (newV == undefined) ? n : newV
return n
}
return child
}
var myFun = boss()
4.閉包需要注意的事項
因為閉包會將這些變數一直儲存在記憶體中,這樣對記憶體消耗極大,影響網頁的效能,在IE中可能還會造成記憶體洩漏。
解決這個問題的方法:
如將當前變數的值設定為“null”,將變數的引用解除,當垃圾回收啟動時,會自動對這些值為“null”的變數回收。
相關文章
- 回撥函式函式
- 函式指標&回撥函式Callback函式指標
- 回撥函式(CallBack)函式
- JavaScript回撥函式JavaScript函式
- JavaScript 回撥函式JavaScript函式
- JS—回撥函式JS函式
- 【知識點】inline函式、回撥函式、普通函式inline函式
- C語言函式指標與回撥用函式C語言函式指標
- JavaScript:鉤子函式與回撥函式的區別JavaScript函式
- 函式回撥(C++)函式C++
- 回撥函式的作用函式
- Python/OpenCV:回撥函式PythonOpenCV函式
- TLS回撥函式(Note)TLS函式
- java 回撥函式示例Java函式
- 函式閉包函式
- Python技法3:匿名函式、回撥函式和高階函式Python函式
- 回撥函式的作用與意義函式
- [JS]回撥函式和回撥地獄JS函式
- C語言函式指標與回撥函式使用方法C語言函式指標
- 閉包函式(匿名函式)的理解函式
- 函式指標的重要用途——回撥函式函式指標
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- JS之回撥函式(callback)JS函式
- C++回撥函式 用法C++函式
- 回撥函式的理解(一)函式
- java回撥函式機制Java函式
- go 閉包函式Go函式
- js函式閉包JS函式
- Swoole 回撥函式的註冊與呼叫函式
- 【不在混淆的C】指標函式、函式指標、回撥函式指標函式
- 函式物件、裝飾器、閉包函式函式物件
- 3. 匿名函式與閉包函式
- Kotlin 之高階函式與Lambda表示式與閉包Kotlin函式
- C++中的回撥函式C++函式
- 深入理解 JavaScript 回撥函式JavaScript函式
- setInterval 回撥函式傳引數函式
- js 徹底理解回撥函式JS函式
- 函式閉包機制函式