我无法理解前面的章节(包括断言的概念)后回到本书,但现在我理解了这一点,我继续阅读第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?);
}
答案 0 :(得分:2)
对象是“copy by reference”所以当创建武士时,它复制了忍者。如果你将忍者复制到武士后重置,那么忍者仍然存在于武士的背景下。
如果您要将ninja = {};
移到var samurai = { chrip: ninja.chirp };
之上,那么武士语中的忍者将为空。