参考下面给出的代码:
我无法理解引起下面两点之间混淆的问题:
revArrayInPlace(a)
时,会更改变量a
的原始值,但revArray(a)
时,它不会更改变量a
的原始值在revArrayInPlace(a)
中,if(x[someIndex] = someValue)
将x[someIndex]
的原始值替换为somevalue
,然后逻辑x = newArray
也应替换数组{{1}的原始值当revArray(a)执行
x
newArray
答案 0 :(得分:4)
在revArray
结束时,您正在执行此操作:
x = result;
这对修改原始数组或原始变量(我认为是a
)没有任何意义(但它是一个常见的误解,你不是唯一的!)。它只是修改x
中的值,将其从对原始数组的引用更改为对新数组的引用。你接下来要做的就是退出这个没有完成任何事情的功能。
在JavaScript中,只有值会传递给函数,而不是变量。所以:
var a = [1, 2, 3, 4, 5];
revArray(a);
...从a
读取值并将该值传递给revArray
。该值告诉JavaScript引擎数组所在的位置,但它根本没有与a
变量的持续连接。如果你考虑它,就必须这样,因为你可以将表达式的结果传递给函数;那么分配给论证的是什么呢? : - )
要使revArray
正常工作,返回结果:
return result;
......并且这样称呼它:
a = revArray(a);
示例:
var a = [1,2,3,4,5];
function revArray(x) {
var result = [];
for (var i = x.length -1; i >= 0 ; i = i-1) {
result.push(x[i]);
}
return result;
}
a = revArray(a);
console.log(a);