defouter():
name = "
haha
"def
inner():
print("
inner
",name)
return
inner
# 注意這裡只是返回inner的記憶體位址,並未執行
func = outer() #返回的是inner 的記憶體位址,inner func() # 相當於執行的是inner()
關於閉包,即函式定義和函式表示式位於另乙個函式的函式體內(巢狀函式)。而且,這些內部函式可以訪問它們所在的外部函式中宣告的所有區域性變數、引數。當其中乙個這樣的內部函式在包含它們的外部函式之外被呼叫時,就會形成閉包。也就是說,內部函式會在外部函式返回後被執行。而當這個內部函式執行時,它仍然必需訪問其外部函式的區域性變數、引數以及其他內部函式。這些區域性變數、引數和函式宣告(最初時)的值是外部函式返回時的值,但也會受到內部函式的影響。
注意此時outer已經執行完畢,正常情況下outer裡的記憶體都已經釋放了,但此時由於閉包的存在,我們卻還可以呼叫inner, 並且inner內部還呼叫了上一層outer裡的name變數。這種粘粘糊糊的現象就是閉包。
閉包的意義:返回的函式物件,不僅僅是乙個函式物件,在該函式外還包裹了一層作用域,這使得,該函式無論在何處呼叫,優先使用自己外層包裹的作用域
閉包函式是什麼
首先看如下 你是否了解其真正的意義 function test local i 0 return function i i 1 return i endenddotest test print dotest 輸出1 print dotest 輸出2 你可能有這樣的疑問 1.呼叫test 返回的函式d...
程式語言中的閉包是什麼東西?
首先,我覺得,乙個概念,如果不理解也不影響使用的話,那麼,就沒必要去理解它 去學習它。閉包就是這樣乙個概念,你不理解它也能很好的用它。俺這兩年寫as3程式,是天天在和它打交道,甚至有過乙個function套乙個,乙個方法中套了20多個function的極端例子,但從未深究過它是怎麼實現的,它就像水和...
js中的閉包是什麼,有什麼用,有什麼缺陷
閉包是可以訪問另乙個函式作用域中變數的函式。簡單地說就是定義在乙個函式內部的另乙個子函式。閉包可以訪問到函式內部的變數 從而實現封裝。var person function setname function newname person.name 直接訪問,結果為undefined person.g...