2017-03-15 1 views
2

내 함수가 전역 변수 (arrayValue)를 변경하지 않는 이유를 알아낼 수 없습니다. 함수 내에서만 변경되지만 바깥 쪽에서 변경하려고합니다. .함수 내에서 전역 변수를 변경할 수 없습니다. (자바 스크립트)

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

주요 혼란의 원인은 함수의 매개 변수 이름과 전역 배열 이름이 서로 충돌한다는 것입니다.

전역 배열을 수정하지 않고 해당 기능의 로컬 배열을 수정하고 있습니다.

두 가지 옵션이 있습니다.

1)이 함수가 수정 된 배열을 반환하고 당신이 그것을받지 않는 수정 된 배열을

reverseArrayInPlace(arrayValue); 

를받습니다. 따라서 이전 배열을 가리키고 있습니다.

arrayValue = reverseArrayInPlace(arrayValue); 

2) 기능 PARAM 및 전역 배열에 대해 고유 한 이름을 가지고.

관련 문제