Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays_Scope_Mutability - Fatal编程技术网

参数';javascript中的作用域和对象可变性

参数';javascript中的作用域和对象可变性,javascript,arrays,scope,mutability,Javascript,Arrays,Scope,Mutability,为了了解JavaScript中的作用域和可变性,我被分配了以下虚拟任务: 对于本练习,编写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它将数组作为参数,并生成一个新数组,该数组的元素顺序相反。第二个是reverseArrayInPlace,它执行reverse方法的操作:它修改作为参数提供的数组,以便反转其元素。两者均不得使用标准反向法 我成功地编写了reverseArray函数,并希望将其重新用于reverseArrayInPl

为了了解JavaScript中的作用域和可变性,我被分配了以下虚拟任务:

对于本练习,编写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它将数组作为参数,并生成一个新数组,该数组的元素顺序相反。第二个是reverseArrayInPlace,它执行reverse方法的操作:它修改作为参数提供的数组,以便反转其元素。两者均不得使用标准反向法

我成功地编写了reverseArray函数,并希望将其重新用于reverseArrayInPlace函数。我编写了3个版本的函数,我真的不明白为什么有些能用,有些不能用。如果您能解释一下这个javascript行为,我将不胜感激。(我知道还有其他方法可以解决这个问题,但我想知道为什么我的方法不起作用)

//反转作为参数给定的数组,并将其作为新数组返回。
函数反向数组(myArray){
var reversedArray=[];

对于(var i=0;i您的
reversearlayinplace1
reversearlayinplace2
不起作用,因为参数是通过JavaScript中的值传递的。
myArray
是函数的本地属性,重新分配它不会影响调用方


您可以对代码重用采取相反的方法,并在
reversearlayinplace
方面实现
reversearlay
。您可以复制输入数组,在适当的位置反转副本,然后返回它。(您可以通过调用
arr.slice()
来复制数组)

在函数中,
myArray
是一个引用原始数组的变量,因此您对元素所做的任何更改,例如

myArray[i] = x;

将更改原始数组。但是如果您将
myArray
变量设置为某个值,则原始数组将超出范围,并且您仅将局部变量设置为反向数组。这为您提供了修复代码的正确方法。

有关“不起作用”的解释,请参见此部分不起作用:这并不能解释第三种方法为什么起作用。如果参数按值传递,则不会使用参数“myArray”修改全局对象。参数按值传递。这并不意味着数组被复制。两个值仍然引用原始数组,因此
myArray[i]
修改数组的内容。
myArray[i] = x;