JavaScript 不重置循环中的变量

1 javascript arrays loops

我想问一下原因,为什么 JavaScript 在每次循环迭代后不重置变量,在我尝试将其设置为等于函数参数(#1)的情况下。如果变量等于特定数组(#2),它将进行重置。

#1
    function almostIncreasingSequence(sequence) {
            for (var i = 0; i < sequence.length; i++) {
                var testArray=sequence;
                testArray.splice(i, 1);
                console.log(testArray);
            }
        }
        almostIncreasingSequence([1, 3, 2, 1]);
#2
    function almostIncreasingSequence(sequence) {
            for (var i = 0; i < sequence.length; i++) {
                var testArray=[1, 3, 2, 1];
                testArray.splice(i, 1);
                console.log(testArray);
            }
        }
        almostIncreasingSequence([1, 3, 2, 1]);
Run Code Online (Sandbox Code Playgroud)

将感激每一个答案。谢谢。

Mat*_*att 5

正如上面的评论所述,您对变量分配感到困惑。

在#1中,你的印象var testArray = sequence;与说的相同var testArray = [1, 3, 2, 1]。事实并非如此。var testArray = sequence只是对序列的引用。无论您在testArray回调中修改什么sequence,也会在那里修改它。

要修复#1 以使其与#2 一样执行,您必须执行以下操作var testArray = sequence.slice()。这将执行 的浅复制,sequence以便修改testArray不会影响sequence

function almostIncreasingSequence(sequence) {
  for (var i = 0; i < sequence.length; i++) {
      var testArray=sequence.slice();
      testArray.splice(i, 1);
      console.log(testArray);
  }
}

almostIncreasingSequence([1, 3, 2, 1]);
Run Code Online (Sandbox Code Playgroud)