副作用/传递到函数中的全局变容变化
Side effect/ changing global varaibles that pass into a function
如果有人问我这个问题,请原谅,但我似乎找不到。
我正在尝试创建一个数组并反转它(不使用reverse)这段代码非常完美:
function reverseArrayInPlace(array) {
for (var i = 0; i < Math.floor(array.length / 2); i++) {
var old = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = old;
}
return array;
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]
正如您所看到的,它在array
中接受一个,执行一些逻辑,并返回相同的更改后的array
。
尽管如此,对我来说,为什么这个代码不起作用是没有意义的:
var some_array = [6,7,8,9,10];
function reverseArrayInPlace(array) {
var replacement_array = [];
for (var i = 0; i < some_array.length; i++)
replacement_array.unshift(array[i])
array = replacement_array;
return array;
}
reverseArrayInPlace(some_array);
console.log(some_array);
// → [ 6, 7, 8, 9, 10 ]
此代码还接收一个数组,执行一些逻辑(和赋值)并返回一个数组。为什么它不像第一个那样改变全局变量?有什么方法可以改变它吗?
好的,你需要这个:
function reverseArrayInPlace(array) {
replacement_array = [];
for (var i = 0; i <array.length; i++)
{
replacement_array.unshift(array[i])
}
for(var i = 0; i <array.length; i++){
array[i]=replacement_array[i]
}
return array;
}
some_array = [6,7,8,9,10];
reverseArrayInPlace(some_array)
console.log(some_array)
替换变量的内容将起作用。
逐步通过代码:
function reverseArrayInPlace(array) {
var replacement_array = [];
for (var i = 0; i < some_array.length; i++)
replacement_array.unshift(array[i])
此时,您已经创建了一个与原始数组相反的新数组。
array = replacement_array;
为array
分配新值不会改变原始数组;只有可变数组方法或元素取消引用才能实现这一点。
return array;
}
您在这里返回新数组,这样您就可以在函数之外执行赋值:
some_array = reverseArrayInPlace(some_array);
console.log(some_array);
然而,这不再符合修改现有阵列的条件;您可以使用unshift()
和splice()
,不过:
for (var i = 1, n = array.length; i < n; ++i) {
array.unshift(array.splice(i, 1)[0]);
}
直接影响全局:
var some_array = [6,7,8,9,10];
function reverseArrayInPlace(array) {
var replacement_array = [];
for (var i = 0; i < array.length; i++)
replacement_array.unshift(array[i]);
for (var i = 0; i < array.length; i++)
array[i] = replacement_array[i];
}
reverseArrayInPlace(some_array);
alert(some_array);
您不需要返回数组。
相关文章:
- 全局变量和全局对象的属性之间有什么区别吗
- 正在全局范围中查找JavaScript函数
- delete关键字在全局变量上的不同行为
- 在javascript函数中设置全局变量
- 单击页面上的链接后高度发生变化
- 如何将getJson的响应保存在全局变量中
- 全局对象是属于哪个类的对象
- Javascript全局onclick监听器
- 从Javascript方法返回全局变量
- 访问jsrender模板中的全局javascript变量并更新它
- React redux初始化功能,无论状态变化如何
- javascript无法重新定义函数内部的全局对象
- javascript 中的全局函数
- 副作用/传递到函数中的全局变容变化
- 反应组件交互和全局状态变化
- 动态变化的角度全局值
- 原型取决于全局变量(如果该变量发生变化怎么办)
- 全局变量不't随jquery函数变化
- 当javascript中的条件变量(全局变量)发生变化时,停止循环
- 为什么我不能读取嵌套函数中全局变量的变化