借用mdn的定義
閉包是指這樣的*作用域*,它包含有乙個*函式*,這個函式可以呼叫被這個作用域所*封閉*的變數、函式或者閉包等內容。通常我們通過閉包所對應的函式來獲得對閉包的訪問。
我們知道在js中 內部作用域能訪問外部作用域,外部作用域不能訪問內部作用域。
如果現在我有乙個很重要的變數a=1(不能改,改了程式就崩潰,但是我部分時候需要全域性呼叫),我不想讓人誤改。如果我使用全域性變數,被人誤改了=>game over
如果我用區域性變數,全域性又不能呼叫,我該怎麼辦?
我們可以在a所在作用域裡面加一層作用域,這樣裡層作用域能訪問a,但是這樣還不夠,全域性還是不能訪問,我們還要在裡層作用域裡面將其暴露出來(類似的概念參考函式的setter. getter)
var b= function()
return take() // ***暴露並執行內層函式
} b() //輸出1 即a的值
通過上面**我們就創造了乙個閉包 ,通過這個閉包 我們可以達到 窖藏?(隱藏但是是一種保護我們能隨時獲取)乙個變數的目的
我們再看乙個例子
function makefunc()
return displayname;
}var myfunc = makefunc();
console.log(myfunc)mufunc ()//輸出mozilla
一般我們執行完乙個函式以後,區域性活動物件會被銷毀
但當我們執行完makefunc() 以後name這個變數在記憶體中還是存在的
當makefunc()函式執行完畢後,其執行環境的作用域鏈被銷毀,但它的活動物件仍然會留在記憶體中
當myfunc()執行完的時候 實際上就是di spalyname執行完的時候 name此時才被銷毀了
閉包只能取得包含函式中任意變數的最後乙個值, 比如迴圈i值只能取最後乙個,解決途徑就是立即執行函式的運用
高階程式設計
mdn閉包
阮一峰-閉包
python閉包怎麼理解 Python 閉包的理解
很多函式型的語言都有閉包這一概念,比如python的兄弟js。人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。下面舉乙個例子 coding utf 8 def foo nums 0 5 for i in range 5 nums i lambd...
javaScript閉包理解
以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...
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...