混淆与函数,循环和数组相关的执行

时间:2017-02-27 16:22:21

标签: javascript arrays function loops

参考下面给出的代码:
我无法理解引起下面两点之间混淆的问题:

  1. 执行revArrayInPlace(a)时,会更改变量a的原始值,但
  2. 执行revArray(a)时,它不会更改变量a的原始值
  3. revArrayInPlace(a)中,if(x[someIndex] = someValue)x[someIndex]的原始值替换为somevalue,然后逻辑x = newArray也应替换数组{{1}的原始值当revArray(a)执行

    时,使用新值x
    newArray

1 个答案:

答案 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);