
* 겪고 있는 문제 상황을 최대한 자세하게 작성해주세요.
* 문제 해결을 위해 어떤 시도를 해보았는지 구체적으로 함께 알려주세요.
강의에서 나온 예시 코드의 실제 실행 순서를 제가 제대로 이해한 것이 맞는지 적어보았습니다. 맞는지 확인 부탁 드립니다.
예시 코드에 적어두었지만 처음 console.log(a) 를 호출할 때, 1로 예상했으나 실제로는 undefined로 출력됩니다.
undefined로 출력되는 이유는 최초 전역변수로 a 값을 1로 할당했으나 (예상실행순서의 [ㄱ]),
inner 함수 내부에서 지역변수로 a를 선언했기에(예상실행순서의 [ㄴ])호이스팅된 inner 내부의 지역 변수 a의 값을 출력하게되어 undefined가 출력되는게 맞나요?
즉, 변수명이 동일하게 a로 되어 있을 뿐, 전역변수 a와는 전혀 관련없는 지역변수에 접근하고 있다가 맞는지 궁금합니다.
-------------- 예시 코드 ---------------
var a = 1;
var outer = function () {
var inner = function () {
console.log(a); // undefined <- 1로 예상했으나 실제로는 undefined가 출력됨
var a = 3;
};
inner();
console.log(a); // 1
};
outer();
console.log(a); // 1
-------------- 예상 실행 순서 ---------------
전역
ㄴ var a; // a = undefined;
ㄴ a = 1; // [ㄱ] a = 1;
ㄴ outer()
ㄴ inner()
ㄴ var a; // [ㄴ] a = undefined
ㄴ console.log(a); // 출력값 : undefined << 바로 위의 지역변수 a에 접근
ㄴ a = 3;
ㄴ console.log(a); // 출력값 : 1 << 전역변수 a 접근
ㄴ console.log(a); // 출력값 : 1 << 전역변수 a 접근

