먼저 코드를 살펴보겠습니다
function show(){ alert(abc); } var abc="defg"; show();
C 또는 Java 프로그래밍 경험이 있는 사람들은 다음과 같이 말할 수 있습니다. "이 프로그램은 종료되었습니다. 변수는 변수를 참조하는 함수 다음에 정의됩니다. 버그로 인해 브라우저에서 실행하면 결과가 어떻게 될까요?" 완벽하게 작동합니다! 다음으로, 무슨 일이 일어나고 있는지, 즉 var로 정의된 변수와 var 없이 정의된 변수의 차이점에 대해 이야기해 보겠습니다.
1. 변수 없음
간단히 말하면 변수를 정의할 때 var를 생략하는 것은 안전하지 않지만 합법적입니다. 이때 변수가 어디에 정의되어 있든 인터프리터는 변수에 전역 범위를 부여합니다.
2. 변수가 있습니다
안전하고 합법적입니다. 정의된 변수의 범위는 정의된 위치에 따라 다릅니다. 범위가 구체적으로 무엇인지에 대해서는 이 블로그의 "Javascript 범위" 기사를 참조하세요.
이렇게 하면 처음에 문제가 해결될 수 있습니다. 함수 내부에 있는 것은 abc의 정의인데 값은 정의되지 않습니다. 이때 abc는 전역 범위를 갖고 함수 외부의 것은 abc의 값만 업데이트합니다.