在JavaScript中使用变量引用
我在JavaScript中使用数组,我的问题是使用变量引用。我有下面的两个例子,它似乎有相同的结果,但它没有在JavaScript中使用变量引用,javascript,reference,Javascript,Reference,我在JavaScript中使用数组,我的问题是使用变量引用。我有下面的两个例子,它似乎有相同的结果,但它没有 //Example 1 var arr = [1,2,3]; var refArr = arr; arr[0] = 1; arr[1] = 3; arr[2] = 4; console.log(arr); //[1,3,4]; console.log(refArr); //[1,3,4] //Example 2 arr = [1,2,3]; refArr = arr; arr = [
//Example 1
var arr = [1,2,3];
var refArr = arr;
arr[0] = 1;
arr[1] = 3;
arr[2] = 4;
console.log(arr); //[1,3,4];
console.log(refArr); //[1,3,4]
//Example 2
arr = [1,2,3];
refArr = arr;
arr = [1,3,4];
console.log(arr); //[1,3,4];
console.log(refArr); //[1,2,3]
我不知道两个例子之间有什么区别?直到
refArr=[1,3,4]
,refArr
和arr
都是指同一个对象。更改该对象(通过指定属性0
、1
和2
),可以同时更改arr
和refArr
的内容
但是,[1,3,4]
是您刚才在那里构建的另一个对象,从这一行开始,refArr
引用该对象,而不是arr
引用的对象
需要注意的一点是,JavaScript中没有变量引用,只有对象引用<代码>重构不指
arr
;这两个变量都引用表示为[1,2,3]
的对象。(好吧,无论如何,直到那一行。)直到refArr=[1,3,4]
,refArr
和arr
都是指同一个对象。更改该对象(通过指定属性0
、1
和2
),可以同时更改arr
和refArr
的内容
但是,[1,3,4]
是您刚才在那里构建的另一个对象,从这一行开始,refArr
引用该对象,而不是arr
引用的对象
需要注意的一点是,JavaScript中没有变量引用,只有对象引用<代码>重构不指arr
;这两个变量都引用表示为[1,2,3]
的对象。(好吧,无论如何,直到那一行。)这是:
arr[0] = 1;
arr[1] = 3;
arr[2] = 4;
不等同于此:
arr = [1,3,4];
在第一种情况下,覆盖同一父数组对象中的单个元素
在第二种情况下,将替换整个数组对象
元素具有相同值的事实是不相关的。这是:
arr[0] = 1;
arr[1] = 3;
arr[2] = 4;
不等同于此:
arr = [1,3,4];
在第一种情况下,覆盖同一父数组对象中的单个元素
在第二种情况下,将替换整个数组对象
元素具有相同值的事实是不相关的。在示例1中:
arr=refArr=[1,2,3](=originObject,它保留在内存中)
,然后更改originObject,因此arr和refArr都更改了
在示例2中:不同的是您将arr分配给另一个originObject。在示例1中:
arr=refArr=[1,2,3](=originObject,它保留在内存中)
,然后您更改originObject,因此arr和refArr都更改了
在示例2中:不同之处在于您将arr分配给另一个原始对象。Thi Tran先生
当你声明并初始化一个数组时,比如var arr=[1,2,3]代码>变量“arr”在全局范围内,
因此,当您对该引用进行任何更改时,都将反映其他引用。
如果我错了,请纠正我 Thi Tran先生
当你声明并初始化一个数组时,比如var arr=[1,2,3]代码>变量“arr”在全局范围内,
因此,当您对该引用进行任何更改时,都将反映其他引用。
如果我错了,请纠正我