• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

inner함수 console.log(a)질문..

20.09.09 00:24 작성 조회수 126

1

undefined가 출력되는데 여기서 이해가 안되는게

outer함수가 호출될때 outer실행컨텍스트가 실행되면서 this바인딩하고 호이스팅이 일어나는데 여기서 호이스팅으로  함수선언식인 inner함수가 호이스팅됩니다. 그 다음에 outer scope에서 a를  탐색하는데 지역변수가 없으니까 global scope에서 탐색 해서 전역변수인 a 가 1일이니까 1출력하고 그다음 inner함수가 호출되면서  inner실행컨텍스트가 생성되면서 호이스팅이 일어나면서 a가 3이 할당되면서 올라오지 않나요?? 그래서 a가 3인줄알았는뎅 여기가 이해가 안됩니다 죄송하지만 이유를 조금 더 풀어서 알려주실수 있을까요 ?? TT

답변 2

·

답변을 작성해보세요.

3

네, 맞습니다.
호이스팅은 '선언'만 합니다.
내부함수A에서 a에 접근하고자 할 때 가장 먼저 발견된 a는 A에서 선언한 a입니다.
그러니까 외부함수B에서 동일한 식별자 a의 변수를 선언했는지 아닌지 여부와 무관하게
오직 A에서 선언한  a의 값을 출력할 따름입니다.

그런데 만약 A에서 a를 선언하지 않았다면, 그제서야 B, C, 전역컨텍스트 순으로 찾아 올라갑니다.
그 중에서 가장 먼저 발견된 a를 출력할 것입니다.

0

이순곤님의 프로필

이순곤

질문자

2020.09.09

아 갑자기 대충 이해된거 같은데 감이 맞을까요??

호이스팅할때 함수표현식처럼 a만 선언 하는거지 

할당하는게 아니라 undefined가 출력이 되고

만약에 내부함수에 var a = 3;을 선언 안했으면 외부함수에 지역변수도 없으니까 전역변수에서 a를 찾는데 전역변수 a 값은 1이니까 내부함수에서는 1이 출력되고요

혹시 맞을까요??