2017-03-15 141 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)函數參數和全局數組有唯一的命名。

相關問題