JavaScript에서는 var를 사용하여 변수를 선언하지만 이 구문이 꼭 필요한 것은 아닙니다. 많은 경우 var를 사용하여 변수를 선언하지 않고 직접 사용할 수 있습니다.
코드는 다음과 같습니다.
window. y = "hello"; function func(){ y = "OH, NO!!!"; } func(); alert(window.y); //#=> display "OH, NO!!!"
컨텍스트의 레이어에 이러한 "암시적으로" 정의된 변수가 있는 경우 해당 레이어의 변수는 창에 새 변수를 생성하지 않고 수정됩니다. (이러한 종류의 버그는 특히 더 복잡한 코드를 캡슐화할 때 매우 짜증스럽습니다.)
예:
코드는 다음과 같습니다.
var x = "window.x"; function a() { var x = "a's x"; var b = function() { var c = function() { //no var! x = "c's x:"; }; alert("before c run,the b.x:" + x); c(); alert("after c run, the b.x:" + x); }; alert("a.x is:" + x); b(); alert("after b function runed, the a.x is:" + x); }; alert("before a run, window.x:" + x); a(); alert("after a run, window.x:" + x);
다음 레이어가 있습니다: window, func a, func b, func c는 항상 계층적으로 중첩됩니다. 창->a->b->c
window와 a 모두 변수 x가 정의되어 있지만, b에서는 변수가 정의되어 있지 않습니다. c에서는 x가 '암시적으로' 선언되고, x는 궁극적으로 a 변수의 값을 수정합니다.
JavaScript에서는 변수를 선언할 때 변수 앞에 var가 와야 한다는 점을 기억하세요.