閉包是一個函數加上它可以正確訪問的 upvalues。
閉包的基礎是詞法定界。
函數內部嵌套另一函數時,內部函數體可以訪問外部函數的局部變量,這種特徵我們稱作詞法定界。
function newcount()
local a;
c = function()
a=a+1; //內部函數可以訪問外部的a.
end
c();//執行內部函數。
return a;
end
閉包的另一基礎是:函數可以作爲返回值。
如
function newcount2()
local a=1;
return function() --外部函數返回一個函數。
a=a+1;
return a;
end
end
閉包就是被返回函數+此函數被修改的本地變量。
閉包不是一個函數,也不是一個變量。是兩者的組合體。
xx=newcount2()
這裏的xx就是一個閉包。
print(xx())
print(xx())
-------------------打印的結果就是
2
3
感覺與C++的類與對象,對象的方法的概念類似。
--------------------------------------------
2017-10-23
閉包的三個要素。
1,閉包函數;2 工廠(創建並返回閉包函數的函數)3,upvalue(閉包函數可以訪問到的外部變量)