2017-03-15 98 views
2

我不明白为什么我的函数不改变全局变量(arrayValue) 它只改变它在函数内部,但我想改变它在外面。不能更改函数内部的全局变量(Javascript)

function reverseArrayInPlace(arrayValue) { 
    var newArr = []; 
    for (var i = 0; i < arrayValue.length; i++) { 
    newArr.unshift(arrayValue[i]); 
    } 
    arrayValue = newArr; 
    return arrayValue; 
} 
var arrayValue = [1, 2, 3, 4, 5]; 
reverseArrayInPlace(arrayValue); 
console.log(arrayValue); // It gives [1, 2, 3, 4, 5] instead of [5, 4, 3, 2, 1] 
console.log(reverseArrayInPlace(arrayValue)); // It gives [5, 4, 3, 2, 1] 

回答

1

在你的问题的主要问题...

为什么我的功能不会改变全局变量?

...是你误用参数在你的函数(命名为arrayValue)全局(也叫arrayValue)。

你可以很容易地看到这一点,如果你给你的函数另一个参数:

function reverseArrayInPlace(arrValue) { 
 
    var newArr = []; 
 
    for (var i = 0; i < arrValue.length; i++) { 
 
    newArr.unshift(arrValue[i]); 
 
    } 
 
    arrayValue = newArr; 
 
} 
 

 
var arrayValue = [1, 2, 3, 4, 5]; 
 

 
reverseArrayInPlace(arrayValue); 
 

 
console.log(arrayValue);

注意,在这个片段的功能不返回任何东西(实际上它返回undefined),只是改变你的全球。

6

混乱的主要原因是你的函数的参数名和你的全局数组名冲突。

您不修改全局数组,您正在修改该函数本地的数组。

现在有两种选择。

1)接收修改后的数组

reverseArrayInPlace(arrayValue); 

即函数返回改性阵列和您没有收到它。因此它指向旧的数组。

arrayValue = reverseArrayInPlace(arrayValue); 

2)函数参数和全局数组有唯一的命名。

相关问题