변수를 초기화할 때에는 var같은 자료형을 붙이는 것을 습관화 해야 한다. (특히, 함수 내부에서 초기화할 때)
유효 범위를 신경써야 되는 이유
기본 전제
for문을 돌렸을 때 i가 var를 통해 선언된다. (즉, for문의 조건에 있는 i가 전역변수)
resultA가 0이 나오는 이유
var를 붙이지 않고 변수를 선언하면 전역변수가 된다. for문의 조건식에서 돌아가는 i를 for문 내부의 a()에서 전역변수 상태로 계속 0으로 초기화시키기 때문에 계속 무한 루프를 시킨다.
resultB가 10이 나오는 이유
for문 내부의 b()에서 초기화 되는 i는 var를 붙였기 때문에 b() 내부에서만 사용되는 아예 다른 i다. 그렇기 때문에 for문이 정상적으로 작동해서 결과값이 10이 된 것이다.
전역 변수 사용법
하나의 객체를 전역 변수로 만들고 객체의 속성으로 변수를 관리한다.
유효 범위의 대상
정적 유효 범위
자바스크립트의 함수가 선언된 시점에서의 유효 범위
렉시컬이라고도 부른다.
결과
5가 출력 된다.
이유
왜냐하면 언뜻보면 a()가 실행되고 그 안에서 b()가 실행되어서 i가 10이 될 것 같지만 b()는 자신의 내부의 코드에서 사용하는 i가 자신의 인자에 있는지 먼저 살펴본 다음에, 존재하지 않을 경우에는 자신이 호출됬을 때가 아닌 자신이 정의 됬을 때의 i의 값인 5를 가져오게 된다.
이렇게 자신이 호출됬을 때가 아닌 자신이 정의 됬을 때의 값을 가져오게 되는 것을 정적 유효 범위라고 한다.