js中變數是function級作用域,也就是說,在function中定義的變數可以再function內部(包括內部定義的巢狀function中)使用,而在function外部無法使用,但是,js中,函式就是一塊儲存了現有資料的記憶體,是要找到這塊記憶體就可以進行呼叫。因此,如果想辦法獲取到內部的巢狀函式,就可以在外部使用使用巢狀函式來呼叫內部定義的區域性變數
functionf1(
)return f2 //關鍵點
}var f=f1(
)f()
//1
函式f1中定義了變數v,正常情況下在f1外面是無法訪問v的,但是f1中巢狀定義的函式f2是可以訪問v的,而且在呼叫f1時會返回函式f2,這樣就可以在f1外面訪問f1的區域性變數 v ,這就是閉包,當然,如果需要還可以在f2中直接返回v的值,就可以在f1外部獲取v的值。
let f;f=
function()
}let oref=f(
);oref.note=
"danger"
console.
log(oref.note)
//輸出danger
高手文章:
groovy語法之閉包:
為什麼js會有閉包:
說說js閉包
js閉包涉及到作用域,js的作用域有兩種,全域性變數和區域性變數,全家變數就是在函式外宣告的,區域性變數是在函式內宣告的,函式內部可以直接讀取全域性變數 但是函式外部自然無法讀取函式內的區域性變數 函式內部宣告變數的時候,要用var不然就是個全域性變數 有時候需要得到函式內的區域性變數 濫用閉包會可...
JS閉包理解
下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...
JS基礎 閉包
注 自由變數是既不是在本地宣告又不作為引數傳遞的一類變數。function a return b var b a b hello closure 定義乙個函式a a中定義了函式b a中返回b 執行a 把a的返回結果賦值給變數b 執行b 閉包會在父函式外部,改變父函式內部變數的值。所以,如果你把父函式...