Javascript 当函数在不同的声明变量上运行时,为什么会更改输入?

Javascript 当函数在不同的声明变量上运行时,为什么会更改输入?,javascript,Javascript,在下面的代码中,operatorSequence函数应该使用变量“input”而不是“inputArray”来运行,但是当函数运行时,inputArray(“a”)会改变 是什么导致了此问题,如何修复此问题以使输入阵列不发生更改 数学中的阶乘 函数阶乘(输入){ 如果(输入==0)返回1; 如果(输入>0)返回输入*阶乘(输入-1); } //从数组中切片索引 函数索引(数组、索引){ 设temp=array.slice(0,索引); 临时推送应用(临时,数组切片(索引+1)); 返回温度;

在下面的代码中,operatorSequence函数应该使用变量“input”而不是“inputArray”来运行,但是当函数运行时,inputArray(“a”)会改变

是什么导致了此问题,如何修复此问题以使输入阵列不发生更改

数学中的阶乘 函数阶乘(输入){ 如果(输入==0)返回1; 如果(输入>0)返回输入*阶乘(输入-1); } //从数组中切片索引 函数索引(数组、索引){ 设temp=array.slice(0,索引); 临时推送应用(临时,数组切片(索引+1)); 返回温度; } //运算符序列 函数运算符顺序(输入数组、运算符数组、det){ //该函数应在“input”变量上运行 让输入=输入阵列; //det确定支架位置 //根据括号位置,两个输入索引合并为一个,并删除一个运算符 while(运算符数组长度>0){ 设temp1=阶乘(运算符array.length-1); 设temp2=数学楼层(det/temp1); 输入[temp2]=运算符数组[temp2](输入[temp2],输入[temp2+1]); operatorArray=切片索引(operatorArray,temp2); 输入=切片索引(输入,temp2+1); det-=temp1*temp2; } 返回输入[0]; } 常数a=[1,8,3,4]; 设b=[(a,b)=>a+b,(a,b)=>a-b,(a,b)=>a*b]; 控制台日志(运算符顺序(a、b、0)); 控制台日志(a); //24 //[9,8,3,4] 将数组赋值给另一个变量不会生成具有值的新数组。相反,它对原始数组使用相同的对象引用

稍后,您将指定值

input[temp2] = operatorArray[temp2](input[temp2], input[temp2 + 1]);
将数组
input
作为
inputArray
作为原始数组
a

您可以使用以下方法处理阵列的浅层副本:


让输入=输入阵列不创建副本<代码>让输入=inputArray.slice()letb=[(a,b)=>a+b,(a,b)=>a-b,(a,b)=>a*b]@Xufox,最后一个是函数数组。名称与外部使用的变量名称无关。
input[temp2] = operatorArray[temp2](input[temp2], input[temp2 + 1]);
let input = inputArray.slice();