JavaScript 자체가 굉장히 유연한(?) 형태로 변수선언을 허용하고 있기 때문에 종종 착각하는 경우가 발생함.
JavaScript 역시 변수의 scope가 존재하는데, 아래와 var를 붙이지 않고 선언하는 경우 특정 function내부에서 선언되었지만, scope가 전역변수처럼 인식된다.
function summary() { resultVal = 100; } alert(typeof(resultVal)); summary(); alert(typeof(resultVal)); alert(resultVal); |
위와같이 function내부에서 var를 붙이지 않고, resultVal이라는 변수를 바로 사용하는 경우 해당 변수가 summary() function내부의 로컬변수가 아니라, 브라우저 최상위객체(window)의 프로퍼티로 설정되며, 위의 코드를 실행하는 경우 최초에는 “undefined” 상태에서 summary()를 호출한 이후 resultVal가 전역변수(실제로는 최상위객체의 프로퍼티)로 설정되어서, 정상적으로 값을 출력한다.
위의 예제와 같이 var를 붙이지 않고, 묵시적으로 변수를 선언하여 사용하는 경우가 많은데, 이 경우 특정 function() 내부에서 선언됐다 하더라도 해당 function()안의 scope가 아니라, 전역변수처럼 사용되는 것에 주의해야 함.
고로 반드시 변수를 선언할때는 var를 붙여서 선언해야….예상치 못한 오작동을 피할 수 있다…