初步理解閉包

2021-07-31 20:59:56 字數 1060 閱讀 2543

借用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...