Javascript Eval覆盖变量

pcc*_*cse 0 javascript eval

不明白为什么下面的代码会覆盖我的var arr.任何帮助赞赏.

var arr = [1,2,3]

var string = "function swap(arr) { var newarr = arr; var temp = arr[0]; newarr[0] = arr[arr.length-1]; newarr[arr.length-1] = temp; return newarr }"

var test = eval("[" + string + "]")[0];

test(arr);
console.log(arr);
//this outputs [3,2,1]

test(arr);
console.log(arr);
//this outputs [1,2,3]
Run Code Online (Sandbox Code Playgroud)

小提琴

谢谢

Ben*_*aum 7

因为在JavaScript中,对象通过引用值传递,而数组是对象.评估与此无关.这里是没有eval产生相同问题的代码:

var arr = [1,2,3];
var arr2 = arr; // this just sets the reference
arr2[1] = 3; // this also changes arr
arr[0] = 3; // this also changes arr2
arr; // [3, 3, 3]
arr2; // [3, 3, 3]
Run Code Online (Sandbox Code Playgroud)