想问一下原因,为什么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]);
对每一个答案都会感激不尽。谢谢。
答案 0 :(得分:2)
如上面的评论中所述,您对变量赋值感到困惑。
在#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]);
&#13;