javascript - 为什么这个 Javascript 示例复制变量值而不是通过引用传递?

标签 javascript pass-by-reference

Javascript The Good Parts 中,它指出:

alt text

所以我希望下面的代码示例输出 1001,因为“对象永远不会被复制,而是通过引用传递”,那么它为什么输出 0000

var page_item = {
  id_code : 'welcome',
  title : 'Welcome',
  access_groups : {
      developer : '0010',
      administrator : '0100'
  }
};
page_item.access_groups.member = '0000';
var member = page_item.access_groups.member;
member = '1001';

$('p#test').html(page_item.access_groups.member); //should be "1001" but is "0000"

添加:

@Gareth @David,谢谢,这就是我试图在此示例中展示的内容,有效:

var page_item = {
  id_code : 'welcome',
  title : 'Welcome',
  access_groups : {
      developer : '0010',
      administrator : '0100'
  }
};
var page_item2 = page_item;
page_item2.access_groups.developer = '1001';

$('p#test').html(page_item.access_groups.developer); //is '1001'

最佳答案

不要在 C++ 上下文中考虑按引用传递,因为它不一样。

var member = page_item.access_groups.member // Sets member to this value
member = '1001'; // Now sets it to another value

如果字符串上有一个方法改变了它们,那么这个:

member.removeLastLetter();

会改变page_item.access_groups.member。但是,使用 = 您正在更改变量的引用,而不是它之前引用的对象

关于javascript - 为什么这个 Javascript 示例复制变量值而不是通过引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4440872/

相关文章:

javascript - 如何处理数组元素之一为 null 的 JS 解构赋值?

javascript - 在 Google map 自动完成中排除某些位置

java - MATLAB 不能从 Java 读回 double[] 数组吗?

c - 堆栈实现中的引用调用错误(C程序)

c++ - 如何通过引用传递 Generic::List?

javascript - tempdata 无法在 mvc3 中的 javascript 中工作?

javascript - TinyMCE-本 map 片上传

javascript - 简化 Node V8 childprocess.exec

javascript - Typescript/JSX - 通过引用分配一个类的实例

c++ - 如何使用引用变量一次传递来反转链表?