想问一下原因,为什么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中,您给人的印象是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]);

关于javascript - JavaScript不会在循环中重置变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49737888/

10-13 00:36