Samurai依赖于ninja.chirp,但我删除了对ninja.chirp的引用。为什么这段代码继续有效?
var ninja = {
chirp: function (n) {
return n > 1 ? this.chirp(n - 1) + '-chirp' : 'chirp';
}
};
function chirp(n) {
return n > 1 ? chirp(n-1) + '-chirp' : 'chirp';
}
var samurai = {
chirp: ninja.chirp
};
ninja = {};
try {
console.log(samurai.chirp(3));
}
catch (e) {
console.log("no can do.");
}
</script>
答案 0 :(得分:5)
当你有
时var a = {};
你实际上有两件事:
a
当你这样做时:
var a = {};
var b = a;
你实际上有三件事:
a
b
这就是为什么当您稍后执行a = null;
时,b仍然保留对原始对象的引用。
在你的情况下会发生同样的事情,即使它被对象,属性和函数稍微模糊了。