Javascript忍者秘籍匿名函数示例

Javascript忍者秘籍匿名函数示例,javascript,Javascript,在无法理解之前的章节(包括断言的概念)之后,我回到这本书,但现在我理解了这一点,我继续阅读,当我看到下面的示例时,我正在阅读第4章。我认为这一部分对我来说没有意义(甚至是书中的图表),为什么当忍者={}(我假设忍者里面的唧唧声消失了?),为什么武士仍然能够将这个匿名函数称为基本上的ninja.chirp?) 我完全可以解决这个问题。chirp可以让它工作,但我真的不明白为什么武士能够指出chirp不再可用(或者这是我不完全理解的结论 我得到了一个正常的闭包,其中函数返回并可以访问词法作用域,但看

在无法理解之前的章节(包括断言的概念)之后,我回到这本书,但现在我理解了这一点,我继续阅读,当我看到下面的示例时,我正在阅读第4章。我认为这一部分对我来说没有意义(甚至是书中的图表),为什么当忍者={}(我假设忍者里面的唧唧声消失了?),为什么武士仍然能够将这个匿名函数称为基本上的ninja.chirp?)

我完全可以解决这个问题。chirp可以让它工作,但我真的不明白为什么武士能够指出chirp不再可用(或者这是我不完全理解的结论

我得到了一个正常的闭包,其中函数返回并可以访问词法作用域,但看起来不是这样的..)

对象是“”,所以当武士被创建时,它复制了忍者。如果你在忍者被复制到武士后重置它,那么忍者仍然存在于武士的环境中


如果你要移动
ninja={}var-samurai={chrip:ninja.chirp}那么武士背景下的忍者将为空。

所以当忍者被重置时,里面的对象会活下来,而且因为武士通过引用指向chirp,所以它仍然可以指向它。好的,有道理。现在,如果没有人指向chirp,GC是自动的吗?基本上,因为访问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?);
    }