我正在看John Resig网站上的这段代码.我不明白的是当忍者对象被设置为空对象时,yell方法仍然可供武士使用.
是因为因为忍者周围还有一个参考,所以它不是垃圾收集的吗?
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
Run Code Online (Sandbox Code Playgroud)
http://ejohn.org/apps/learn/#14 (原始来源,我修改了一点以删除命名函数表达式).
在以下代码中:
var ninja = {
yell: function(n){
return n > 0 ? yell(n-1) + "a" : "hiy";
}
};
Run Code Online (Sandbox Code Playgroud)
ninja.yell的值是对函数的引用.分配:
var samurai = { yell: ninja.yell };
Run Code Online (Sandbox Code Playgroud)
为samurai.yell赋值,该值是对同一函数的引用(即ninja.yell引用的值).然后:
ninja = {};
Run Code Online (Sandbox Code Playgroud)
为ninja指定一个值,它是一个新的空对象.它对分配给samurai.yell的值没有影响,它仍然引用该函数.
变量有一个值,值有一个Type.有一种称为参考类型的特殊类型," ...用于解释诸如delete,typeof和赋值运算符之类的运算符的行为 ".因此,当对象位于赋值表达式中时,指定的值为"类型引用".
因此变量仍然有一个值,但它的值是一个参考.
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |