深入理解閉包 到底什麼才是閉包

2021-09-14 03:37:34 字數 718 閱讀 2081

閉包(closure),是指函式變數可以儲存在函式作用域內,因此看起來是函式將變數「包裹」了起來
//根據定義,包含變數的函式就是閉包

function foo()

cosole.log(n) // uncaught referenceerror: n is not defined

閉包是指可以訪問其所在作用域的函式
//按照定義一的說法,需要通過作用域鏈在全域性環境中查詢變數的函式就是閉包

var n = 0;

function foo()

foo();

閉包是指有權訪問另乙個函式作用域中的變數的函式
//根據定義二,訪問上層函式的作用域的內層函式就是閉包

function foo()

bar();

}foo();

閉包是指在函式宣告時的作用域以外的地方被呼叫的函式
//通過將該函式作為返回值或者作為引數被傳遞

function foo()

return bar;

/*函式的返回值可以簡寫為:

return function

*/}foo()();

到底什麼才是閉包

閉包已經成為近乎神話的概念,它非常重要又難以掌握,而且還難以定義。本文就從閉包的定義說開去 古老定義 閉包 closure 是指函式變數可以儲存在函式作用域內,因此看起來是函式將變數 包裹 了起來 那這樣說來,包含變數的函式就是閉包 按照古老定義,包含變數n的函式foo就是閉包 function f...

深入理解閉包

閉包的定義 mdn 對閉包的定義 根據上面的例子,舉乙個例子 var str xiaoqi function getname getname 函式可以返回str這個變數,但str即不是getname函式的區域性變數,也不是foo函式的引數,所以str就是自由變數。這樣函式getname就是乙個閉包。...

深入理解JavaScript閉包

一 什麼是閉包 多個 兩個或兩個以上 函式巢狀,當內部函式被儲存到外部時,將會生成閉包。內部函式在外面執行的時候一定能夠呼叫的了原來它在的那個函式環境裡的變數。閉包會導致原有作用域鏈不釋放,造成記憶體洩露。functiona var aaa 123 return b var glob 100 var...