关于匿名函数的Javascript Ninja书籍例子的秘密

时间:2015-12-08 18:39:32

标签: javascript

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

我完全得到了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?);
    }

1 个答案:

答案 0 :(得分:2)

对象是“copy by reference”所以当创建武士时,它复制了忍者。如果你将忍者复制到武士后重置,那么忍者仍然存在于武士的背景下。

如果您要将ninja = {};移到var samurai = { chrip: ninja.chirp };之上,那么武士语中的忍者将为空。