【发布时间】:2015-01-12 11:52:34
【问题描述】:
我正在查看 John Resig 网站上的这段代码。我不明白的是,当 ninja 对象设置为空对象时,yell 方法仍然对 samurai 可用。
是不是因为仍然有一个对 ninja 的引用,所以它没有被垃圾收集?
var ninja = {
yell: function(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
};
var samurai = { yell: ninja.yell };
ninja = {};
console.log(samurai.yell(2)); //hiy
http://ejohn.org/apps/learn/#14(原创,我稍作修改,去掉了命名函数表达式)。
【问题讨论】:
-
ninja.yell不是通过引用分配的,而是复制的。 -
不,实际上 javascript 只是按值传递
-
@adeneo,这不太正确,
ninja.yell和samurai.yell将共享对同一个函数对象的引用,问题是ninja正在被一个新对象完全覆盖。 -
@adeneo - 我不认为你是对的。 stackoverflow.com/questions/13104494/…
-
“引用的副本”很好解释,但是副本仍然是作为值传递的,没有真正的引用,只是副本。
标签: javascript