var a = {};
var b = a;
b.c = "whatever";
console.log(a.c) // whatever.
按预期工作,可以通过b更新;
var a = {};
var b = a;
b = "whatever";
console.log(a) // {}
console.log(b) // whatever
无法按预期工作。 a未按b 更新
答案 0 :(得分:2)
这是他们的值存储在内存中的方式:
第一种方法
+-----+------+
Variable | a | b |
+-----+---|--+
Value | {} |<--+ | //'b' points to 'a', so every change (to the object)
+-----+------+ // in 'b' will modify 'a'.
第二种方法
+-----+---------+
Variable | a | b |
+-----+---|-----+
Value | {} |<--+ | //First assignment.
+-----+---------+
Value | {} | Whatever| //Second assignment. So, you're only assigning a new
+-----+---------+ //value to 'b' and not modifying the previous
//value (properties/fields) from 'a'.
答案 1 :(得分:1)
请查看有关Explaining Value vs Reference in Javascript。
的这篇文章当你这样做时,你已经覆盖了参考文献:
b = "whatever";
执行此操作时,b
不再指向a
。现在,b
拥有自己的价值。您可以更新b引用的对象的属性,如示例所示:
b.c = "whatever";
答案 2 :(得分:1)
通过声明b = "whatever";
,您已将参数b
重新分配(抱歉我不知道确切的术语,因此我称之为&#39;引用&#39;)变量{{ 1}},在其中包含值a
的{{1}}。
重要的是要知道JavaScript在变量赋值方面是灵活的,就像今天的大多数现代高级编程语言一样,因为它不仅允许您更改先前声明的变量的值,还可以更改数据该指定变量的类型,例如:
string
因此,如果您不小心分配变量,则可以非常轻松地创建错误,类似于您在第二种方法中表达的错误。