2017-03-15 20 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命名)あなたの関数でパラメータを勘違いしていることです。

あなたは機能別のパラメータ与える場合は、これを簡単に見ることができます:このスニペットでは関数は何も返していないこと(実際にはundefinedを返すです)

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);

注意を変えるだけで、あなたのグローバル。

6

主な混乱の原因は、関数のパラメータ名とグローバル配列名が競合していることです。

グローバルアレイを変更していないため、その関数のローカルな配列を変更しています。

あなたには2つのオプションがあります。

1)が修正された配列を返して、あなたがそれを受け取っていない機能修正された配列

reverseArrayInPlace(arrayValue); 

を受信します。したがって、古い配列を指しています。

arrayValue = reverseArrayInPlace(arrayValue); 

2)は、関数のparamとグローバル配列のためのユニークなネーミングを持っています。

関連する問題