2012-06-23 3 views
3

몇 가지 JavaScript 함수에 문제가있어 약식 alert()가 나에게 놀랐던 것을 알릴 때까지 약 1 시간 동안 머리를 긁적 거리게했습니다. 하나의 함수는 다른 함수의 로컬 변수를 변경하고있었습니다. 하나의 함수가 다른 함수의 로컬 변수를 변경합니까?

function first() { 
    msg = "1111"; 

    second(); 

    alert(msg); 
    } 


function second() { 
    msg = "2222"; 
    } 

내가 먼저 전화

은() 내가 경고 상자를 얻을 기대 "1111"말을하지만 대신에 "2222"을 얻을 : 나는 간단한 테스트 스크립트를 썼다. second()가 first()에 속하는 지역 변수에 어떤 영향을 미치나요? 나는 뭔가를 놓치고 있거나 이것이 버그인가?

Firefox 12.0을 사용하고 있습니다. var 문을 사용하는 경우

+2

함수 안에'var msg ... '가 없으면 로컬이 아닙니다. –

+1

https://developer.mozilla.org/en/JavaScript/Guide/Values%2C_Variables%2C_and_Literals#Variable_scope (자바 스크립트를 처음 사용하는 경우 전체 가이드는 읽을만한 가치가 있습니다) –

+0

저는 가변 범위로 인해 혼란 스러웠지만, 그리고 나서 나는 닫히고 폐쇄 범위를 사랑하는 법을 배웠습니다 (http://stackoverflow.com/questions/111102/how-do-javascript-closures-work). –

답변

5

변수는 로컬 아니라 :

var msg = "1111"; 

그렇지 않으면 값이 전역으로 이스케이프합니다.

+0

까다 롭지는 않겠지 만, ""1111 "'과" "2222"'도 조금 이상합니다. –

+0

하하, JavaScript를 사용하여 몇 년 동안 (그리고 나는 취미로 일을하지 않고) 몇 년 동안이 일이 지금까지 완전히 피했다. 나는'msg' ...'앞에'var'을 넣었고 예상대로 작동합니다. 감사! – Iain

+0

변수를 선언하는'var'이 없다고 생각하면 변수가 전역 범위에 있다고 가정합니다. – matt3141

관련 문제