var ninja = {
yell: function(n){
return n > 0 ? ninja.yell(n-1) + "a" : "hiy";
}
};
console.log(ninja.yell(4) == "hiyaaaa");
var samurai = { yell: ninja.yell };
var ninja = null;
samurai.yell(4);
var ninja = {
yell: function yell(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
};
console.log( ninja.yell(4) == "hiyaaaa");
var samurai = { yell: ninja.yell };
var ninja = null;
console.log( samurai.yell(4) == "hiyaaaa");
问题描述错误,已修改,直接来代码。第一段代码会出错,第二段代码可以执行,为什么呢,第二段代码给匿名函数一个名称了
从前,有一间房子,长这个样子:
里面的
func
是一把椅子。你分配给了它一个门牌号,叫
obj1
,于是你可以通过obj1.func
找到这把椅子。有一天,你又建了一栋房子,叫
obj2
,里面也有把椅子,叫func
。它和obj1.func
长得一模一样,因为它们就是指向同一把椅子。又有一天,你把
obj1
的门牌号丢了(obj1 = null;
)。然而通过obj2.func
,你仍然能访问`obj1`里的那把椅子。
为什么呢?
因为房子并没有丢啊,丢的只是门牌号而已。
Update
这又有所不同了,因为你在
ninja.yell
中递归调用了ninja.yell
,而ninja
已经被你赋值为null
了,自然访问不到。正确打开方式:
此为匿名函数递归正解