gpt4 book ai didi

javascript - 反转数组时有 2 个不同的输出

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:57:27 24 4
gpt4 key购买 nike

我在一本书上学习 Javascript,必须通过创建自己的反向函数来练习反向数组。 必须在不创建新变量来保存反转数组的情况下反转数组。我以为我找到了解决方案,但是当我尝试以两种不同的方式输出我的答案时(见下文),我得到了不同的结果输出:

function reverseArrayInPlace(array) {
for (var i = 0; i < array.length; i += 1) {
array = array.slice(0, i).concat(array.pop()).concat(array.slice(i));
}
console.log(array);
}

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

这里是输出:

reverseArrayInPlace(array);
console.log(array);
> [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
> [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

当在函数中使用 console.log() 时,我得到了我想要的答案。

当在函数外部使用 console.log() 时,我得到的是缺少最后一个元素的原始数组。 我想对这种现象进行解释。

最佳答案

函数中的 array 与全局/窗口级别的作用域不同——全局 array 永远不会被触及;该函数改为更改它的本地副本。

如果您没有将 array 作为参数传递给函数,那么它将作用于现在未屏蔽的全局 array 变量:

function reverseArrayInPlace() { // <-- no parameter
for (var i = 0; i < array.length; i += 1) {
array = array.slice(0, i).concat(array.pop()).concat(array.slice(i));
}
console.log(array);
}

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
reverseArrayInPlace();
console.log(array);

(...虽然像这样使用全局变量通常是不好的做法,部分原因是很容易不小心用局部变量掩盖它们,就像你在这里所做的那样。更好的模式是让函数接收它们的数据作为参数和返回一个值,因此您可以在调用该函数时决定将返回值分配给什么。)

关于javascript - 反转数组时有 2 个不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51734517/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com