閉包的乙個重要特徵是:過程(方法)內部定義的變數,即使在方法呼叫完成以後,仍然可以繼續引用到!(即延長了生命週期)
def
method(n)
puts
"n=#"
; #測試用
return
proc
#關鍵:proc是乙個過程物件,只能由"委託"用call來呼叫,這裡在過程內部引用了引數變數n,將會在多次call該過程後,保留對n的引用,形成閉包!
end
adelegate = method(
0
);
#可以理解為c#中的委託,同時該語句會初始化n為0
puts adelegate.call(
1
);
#上一行執行完後n=0,再傳入引數1後,相當於 n = n + 1,即最終n=1
puts adelegate.call(
5
);
#同理,最終n=6
puts adelegate.call(
10
);
#n=16
ruby學習筆記 7 閉包
閉包的乙個重要特徵是 過程 方法 內部定義的變數,即使在方法呼叫完成以後,仍然可以繼續引用到!即延長了生命週期 def method n puts n 測試用 return proc 關鍵 proc是乙個過程物件,只能由 委託 用call來呼叫,這裡在過程內部引用了引數變數n,將會在多次call該過...
閉包學習筆記
作用域的定義 變數起作用的範圍 區域性變數的作用域是它自己所在的函式及其巢狀函式 示例1 function getcounter var counter getcounter counter counter counter 釋放閉包與它的環境 counter null counter getcoun...
閉包 學習筆記
學習閉包,邏輯有點混亂,現在記錄一下學習過程。功能 實現函式容器內儲存乙個變數,記錄該函式執行狀態 原理 看到一篇blog 總結一下閉包的作用 一般來講,當函式執行完畢之後,函式內部的區域性活動物件就會被銷毀,記憶體中僅儲存全域性作用域,即js的記憶體 機制。如果這個函式內部又巢狀了另乙個函式,而這...