看板 Ajax 關於我們 聯絡資訊
我想請問在下面這個例子中,outer 所在的層級,closure.height 會不會被回收? 而 closure 又是否會被回收?@@ inner 這層的 cat object 被回傳到 outer 這層,而 cat.age 這 function 又 refer closure.age 這個變數,所以 closure.age 一定不會被回收。 closure.height 照理說沒有被 refer,到了 outer 曾經應該會被回收。 問題比較大的是 closure,照理說 closure 沒有被 refer,應該會被回收。 可是 closure 有個 property age 被 refer,這樣還能夠說 closure 沒有被 refer 嗎? 但理論上說起來,應該是可以被回收才對。不知道有沒有人知道這問題的答案? 或者可以提供找出答案的試驗方法?@@ // JSBin http://jsbin.com/ohudi5/2/edit#js // javascript:(function() { // outer. // var cat = (function() { // inner. // var closure = { height: 3 }; var cat = { age: function(age) { if (!arguments.length) return closure.age; closure.age = age; return this; } }; return cat; })(); console.log( cat.age(3).age() ); })(); -- Oni devas ami animalojn. Ili estas tiel bongustaj. One should love animals. They are so tasty. 每個人都應該愛動物,他們是如此美味。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.52.50 ※ 編輯: B9 來自: 175.180.52.50 (06/18 23:37)
sk1765:closure是 cat物件的一個私有物件 只有他能夠用 沒有回收的 06/19 01:30
sk1765:說法 他是一個private 這在 The Good Parts裡第五章 06/19 01:32
sk1765:第四種物件宣告方式 Functional模式 有詳細介紹 為什麼這樣 06/19 01:34
sk1765:建構物件 最後答案會是3 06/19 01:37
No:另外,以scope chain來看,內部的closure是有被refer的 06/19 01:48
No:而GC回收是依據有沒有被refer,這樣應該可以推出你要的答案@@ 06/19 01:50