我试图理解一些javascript并发现了一些非常意外的行为。我不太了解这种语言,我想知道这种行为被称为什么,以便我可以正式阅读它。
这是行为的一个例子:
var test={'x':2};
var test2=test;
test2.sourceLinks = [];
console.log('test',test);
console.log('test2',test2);
令我惊讶的是,我发现修改第二个变量也会以某种方式修改第一个变量。变量" test"还将有一个属性.sourceLinks = []。我是否理解正确发生的事情,如果是,那么这种行为的正式术语是什么?
我发现在How do I correctly clone a JavaScript object?发布之后{@ 3}}就解决了这个问题的答案,尽管这比我要求的要多得多。
答案 0 :(得分:2)
持有参考。
当您将对象/数组/功能指定给另一个对象/数组/功能时,它会分配引用而不是值。
要解决此问题,您必须克隆它
答案 1 :(得分:0)
在Javascript中声明变量时,您在内存中创建一个对象,并且作用域中的变量是指向该内存对象的指针。
在您的示例中,两个变量(test和test2)都指向同一个对象。因此,当您修改任一变量指针时,它正在修改内存中的同一对象。