Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使用变量引用_Javascript_Reference - Fatal编程技术网

在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 = [

我在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 = [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”在全局范围内,
因此,当您对该引用进行任何更改时,都将反映其他引用。
如果我错了,请纠正我