j( MDN , spec ) является мутаторным методом: он изменяет состояние массива, на который вы его вызываете. Поэтому, естественно, inArrизменяется arr(в вашем первом примере), так как iи arrоба относятся к одному и тому же массиву.
Возможно, стоит отметить, что popон не принимает никаких параметров, поэтому 1ничего не делает.
В вашем первом примере лучше всего просто назначить другую переменную (скажем, j) начальное значение и использовать для получения значения, а затем уменьшить по мере увеличения . (Кроме того, нет смысла , и вам нужно объявить, чтобы избежать того, что я называю «Ужасом неявных глобалов» :function reverseArray (arr) { var newArr = []; for (var i = 0, j = arr.length - 1; i < arr.length; i++, j--) { newArr[i] = arr[j]; } return newArr; } console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));arr[arr.length - i - 1]jifunction reverseArray (arr) { var newArr = []; for (var i = 0; i < arr.length; i++) { newArr[i] = arr[arr.length - i - 1]; } return newArr; } console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));i
function reverseArray(array) {
var newArr = [],
inArr = array.slice(); // take copy of primitive values
while (inArr.length) { // check decrementing length
newArr.push(inArr.pop());
}
return newArr;
}
console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));
Вы также можете использовать forвместо второй переменную:
function reverseArray(array) {
var newArr = [],
inArr = array.slice(); // take copy of primitive values
for(; inArr.length; ) { // check decrementing length
newArr.push(inArr.pop());
}
return newArr;
}
console.log(reverseArray(["A", "B", "C", "D", "E", "F"]));