ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

需要了解Javascript对象引用

2019-08-24 22:34:09  阅读:85  来源: 互联网

标签:javascript


参见英文答案 > Does Javascript pass by reference?                                    12个
我正在看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

http://ejohn.org/apps/learn/#14(原始来源,我稍微修改了一下以删除指定的函数表达式).

解决方法:

在以下代码中:

var ninja = {
  yell: function(n){
    return n > 0 ? yell(n-1) + "a" : "hiy";
  }
};

ninja.yell的值是对函数的引用.分配:

var samurai = { yell: ninja.yell };

为samurai.yell赋值,该值是对同一函数的引用(即ninja.yell引用的值).然后:

ninja = {};

为ninja指定一个值,它是一个新的空对象.它对分配给samurai.yell的值没有影响,它仍然引用该函数.

变量有一个值,值为Type.有一个名为Reference Type的特殊类型,“…用于解释诸如delete,typeof和赋值运算符之类的运算符的行为”.因此,当对象位于assignment expression中时,分配的值为“类型引用”.

因此变量仍然有一个值,但它的值是一个参考.

标签:javascript
来源: https://codeday.me/bug/20190824/1712847.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有