兩條非常重要的知識點
首先上題
var a = '322'var preview = function
() preview()
//123 window 322
//每個函式在被呼叫的時候
//1.自動獲取兩個特殊變數 arguments類陣列物件 和this物件。內部函式在搜尋這兩個變數的時候,只會搜尋到其變數物件為止。不會訪問其他外部函式作用域中的這兩個變數。 除非把外部函式作用域中的this儲存起來,在乙個閉包能夠訪問的變數裡
//2.會建立乙個執行環境及相應的作用域鏈。使用arguments和其他命名引數的值來初始化函式的活動物件。
//函式執行完
//用有閉包的函式執行完後 其執行環境的作用域鏈會被銷毀(但是閉包的作用域鏈還在引用這個活動物件) 所以活動物件仍然保留。直到閉包被銷毀
1.重點: this.a = 322而不是123 因為 this.a 是物件拿屬性的方法。不是拿變數
var b = 'global'var preview = function
() }
preview()()
//window global
//part window global
//證明了 this物件在全域性函式 和匿名函式中都指向window
2.函式的作用域是在函式宣告的時候決定的(呼叫自由變數也是在函式作用域內開始,與執行環境無關)
閉包 解決閉包問題
1 函式和對其周圍狀態 lexical environment,詞法環境 的引用 在一起構成閉包 closure 2 函式與函式所依賴的上下文環境組成閉包問題。3 閉包指的是 能夠訪問另乙個函式作用域的變數的函式。清晰的講 閉包就是乙個函式,這個函式能夠訪問其他函式的作用域中的變數。var arr ...
python 閉包 python 閉包
閉包 因為python中函式也可以當作物件,所以如果出現當我們返回乙個函式,而該函式含有外部變數的時候就形成了閉包。閉包的特點 是個巢狀函式 可以獲得非區域性的變數 將函式當作物件返回 看乙個例子會更易理解 def make printer msg msg hi there def printer ...
閉包 Python中的閉包
通俗地講就是別人家有某個東西,你想拿到但是因為許可權不夠 不打死你才怪 但是你可以跟家裡的孩子套近乎,通過他拿到!這個家就是區域性作用域,外部無法訪問內部變數,孩子是從家裡返回物件,對家裡的東西有訪問許可權,借助返回物件間接訪問內部變數!def outer 別人家 x 10 別人家裡的東西 def ...