我想问一下原因,为什么 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)
将感激每一个答案。谢谢。
正如上面的评论所述,您对变量分配感到困惑。
在#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)