JavaScript不会在循环中重置变量

时间:2018-04-09 16:51:39

标签: 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]);

对每一个答案都会感激不尽。谢谢。

1 个答案:

答案 0 :(得分:2)

如上面的评论中所述,您对变量赋值感到困惑。

在#1中,您认为var testArray = sequence;var testArray = [1, 3, 2, 1]相同。事实并非如此。 var testArray = sequence只是对序列的引用。无论您在testArray中修改了什么,都可以回复sequence并在那里修改它。

要修复#1以执行#2,您必须执行var testArray = sequence.slice()。这会执行sequence的浅表副本,以便修改testArraysequence没有影响。

&#13;
&#13;
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]);
&#13;
&#13;
&#13;