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


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과 함께 두 이상의 키워드가 온 const과 let또한 변수의 범위에 영향을 미치는, ( 언어 사양 )


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.