함수 내에서 전역 변수의 값을 변경하는 방법


131

JavaScript를 사용하고 전역 변수를 만듭니다. 함수 외부에서 정의하고 전역 변수 값을 함수 내부에서 변경하고 다른 함수에서 사용하고 싶습니다. 어떻게해야합니까?

답변:


148

함수 내부의 변수를 참조하십시오. 마법이 아니라 이름 만 사용하십시오. 전역으로 만들어진 경우 전역 변수를 업데이트하게됩니다.

을 사용하여 로컬로 선언하여이 동작을 재정의 할 수 var있지만을 사용하지 않으면 var해당 변수가 전역 적으로 선언 된 경우 함수에 사용 된 변수 이름이 전역 이름이됩니다.

그렇기 때문에 항상 변수를 명시 적으로 선언하는 것이 가장 좋습니다 var. 잊어 버리면 우연히 글로벌을 망칠 수 있습니다. 만들기 쉬운 실수입니다. 그러나 귀하의 경우, 이것은 돌아 서서 귀하의 질문에 대한 쉬운 대답이됩니다.


3
이것은 나를 위해 작동하지 않습니다 : country = 'foo'$ .ajax ({url : '/ some-endpoint', success : function (data) {country = data.country;}}); CONSOLE.LOG (국가) // 출력 'foo는'
마크 심슨

41
@MarkSimpson-작동하지 않는 이유는 예제에서 console.log바로 실행 되기 때문 이지만 아약스 성공 함수는 나중에 아약스 호출이 실제로 응답을 반환하는 시점에서만 실행되기 때문입니다. 이것은 ajax의 비동기 적 특성에 대한 기본 사항입니다. 클로저 함수의 코드는 주위의 코드와 순서대로 실행되지 않습니다. 이것은 이벤트 중심 코드에 대해 배울 때 이해하는 것이 중요합니다.
Spudley

이 경우 console.log의 정확성을 높이는 방법은 ajax success 함수 안에 넣는 것입니다.
DWils

또 다른 훌륭한 통찰력 : 변수 이름의 철자와 대소 문자를 다시 확인하십시오. sessionId 대 sessionID처럼 간단한 것을 놓치기가 쉽습니다.
whitebeard

나는 이것들에 대해 같은 문제가 있습니다. 그러나 마침내 이해, @Spudley 감사합니다!
Yudhistira Bayu

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20

1
이 멋진 간단한 예제에 감사드립니다. 이것의 논리는 내 머리 속에 들어가고있었습니다. 4d 사고에 익숙해졌습니다.
Mikey3Strings

29

해당 변수의 이름을 사용하십시오.

JavaScript에서 변수는 함수의 매개 변수이거나 var변수 이름 앞에 키워드를 입력하여 명시 적으로 로컬로 선언 한 경우 함수에 대해 로컬 입니다.

로컬 값의 이름이 글로벌 값과 같은 이름 인 경우 window개체를 사용하십시오.

jsfiddle 참조

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

편집하다

ES2015과 함께 두 이상의 키워드가 온 constlet또한 변수의 범위에 영향을 미치는, ( 언어 사양 )


1
글로벌 변수와 로컬로 선언 된 변수 사이의 이름 충돌 및 액세스 방법을 설명하기위한 +1
gdbj 2

6
<script>
var x = 2; //X is global and value is 2.

function myFunction()
{
 x = 7; //x is local variable and value is 7.

}

myFunction();

alert(x); //x is gobal variable and the value is 7
</script>

var함수 내 에서 키워드를 사용하지 마십시오 . 다음을 다룰 필요가 없습니다document.getElementById("outside").value = x;
Ben Aubin

5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

alert("Value of 'a' outside the function " + a); //outputs 20

함께 창 [ '여기서 variableName'] 또는 window.variableName 당신은 함수 내에서 전역 변수의 값을 수정할 수 있습니다.


이것은 각도 구성 요소에서 전역 변수 값을 변경할 수있는 유일한 방법입니다 !!!
Padmaraj Bhat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.