2015-12-08 53 views
1

我無法理解以前的章節(包括assert的概念)後回到本書,但現在我明白了這一點,我繼續閱讀,並在閱讀第4章時看到下面的例子。我認爲對我來說沒有任何意義的部分(甚至是書中的圖表),爲什麼當忍者= {}(我假設忍者內部的唧唧聲已經消失了?),爲什麼武士仍然可以參考那個匿名函數基本上就是ninja.chirp?)。關於匿名函數的Javascript Ninja的祕密書籍示例

我完全得到了修復this.chirp使其工作,但我真的不明白爲什麼武士是能夠指出唧唧應該不再可用(或者這是封閉,我是沒有充分的認識?

我得到正常關閉,其中函數返回,並已獲得詞彙範圍,但這並不期待這樣。)

var ninja = { 
    chirp: function(n){ 
     return n > 1 ? ninja.chirp(n-1) + "-chirp" : "chirp"; 
    } 
    }; 
    var samurai = { chrip: ninja.chirp }; 
    ninja = {}; 
    try { 
     assert(samurai.chirp(3) == "chirp-chirp-chirp", "is this going to work?); 
    } 

回答

2

對象是「copy by reference」等等當武士被創造時,它已經複製了忍者。如果您在複製忍者後重置忍者,那麼忍者仍然存在於武士的環境中。

如果你要將ninja = {};移動到var samurai = { chrip: ninja.chirp };以上,那麼武士背景下的忍者將爲空。

+0

因此,當忍者被重置,對象內部生活,並且由於武士通過引用指向啁啾,它仍然可以指向它。好吧有道理。現在如果沒有人指出唧唧聲,那麼GC是否會自動? – user3502374

+0

非常多,因爲訪問啁啾的方式已被刪除,它不能存在。 –

+0

謝謝,並接受! – user3502374