参数';javascript中的作用域和对象可变性
为了了解JavaScript中的作用域和可变性,我被分配了以下虚拟任务: 对于本练习,编写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它将数组作为参数,并生成一个新数组,该数组的元素顺序相反。第二个是reverseArrayInPlace,它执行reverse方法的操作:它修改作为参数提供的数组,以便反转其元素。两者均不得使用标准反向法 我成功地编写了reverseArray函数,并希望将其重新用于reverseArrayInPlace函数。我编写了3个版本的函数,我真的不明白为什么有些能用,有些不能用。如果您能解释一下这个javascript行为,我将不胜感激。(我知道还有其他方法可以解决这个问题,但我想知道为什么我的方法不起作用)参数';javascript中的作用域和对象可变性,javascript,arrays,scope,mutability,Javascript,Arrays,Scope,Mutability,为了了解JavaScript中的作用域和可变性,我被分配了以下虚拟任务: 对于本练习,编写两个函数,reverseArray和reverseArrayInPlace。第一个是reverseArray,它将数组作为参数,并生成一个新数组,该数组的元素顺序相反。第二个是reverseArrayInPlace,它执行reverse方法的操作:它修改作为参数提供的数组,以便反转其元素。两者均不得使用标准反向法 我成功地编写了reverseArray函数,并希望将其重新用于reverseArrayInPl
//反转作为参数给定的数组,并将其作为新数组返回。
函数反向数组(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;