javascript:修改第二个变量首先修改

时间:2015-08-16 03:54:34

标签: javascript

我试图理解一些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}}就解决了这个问题的答案,尽管这比我要求的要多得多。

2 个答案:

答案 0 :(得分:2)

持有参考

当您将对象/数组/功能指定给另一个对象/数组/功能时,它会分配引用而不是值。

要解决此问题,您必须克隆

答案 1 :(得分:0)

在Javascript中声明变量时,您在内存中创建一个对象,并且作用域中的变量是指向该内存对象的指针。

在您的示例中,两个变量(test和test2)都指向同一个对象。因此,当您修改任一变量指针时,它正在修改内存中的同一对象。