想问一下原因,为什么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/