inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코어 자바스크립트

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

247

이순곤

작성한 질문수 40

1

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

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

javascript

답변 2

3

정재남

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

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

0

이순곤

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

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

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

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

혹시 맞을까요?? 

인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유

0

59

1

setTimeout 에서 this

0

80

1

2강부터 영상이 나오지 않습니다.

0

175

1

자바스크립트 주석에 이상한 점이 있어서 문의드립니다.

0

219

2

return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.

1

259

1

클래스 static 멤버

1

253

1

실행컨텍스트와 스택프레임

2

567

1

프로토타입으로 상속할때 브릿지 사용 이유

0

320

1

호이스팅 관련 질문

1

335

1

책 66p. 예제 3-2 질문입니다.

0

356

1

강의 내용 10:58 캡슐화 질문입니다.

1

398

1

강의 내용 5:10 질문입니다.

1

422

2

전역 공간에서의 this

0

426

2

18:31 addEventListener의 this

1

480

1

outerEnvironmentReference 질문

1

372

1

실행 컨텍스트와 클로저에 대해 질문드립니다.

1

448

1

Object.prototype.constructor의 [[prototype]] ?

1

658

1

함수를 값으로 할당할 때

2

457

1

15:54 'ddd' 사라지는 오류?

4

375

1

프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.

1

404

1

기본형/가변형 질문입니당

0

333

0

선생님 그러면 섹션 0만 봐도 무방한가요!?

0

335

1

Hoisting과 environmentRecord에 관한 질문입니다.

1

290

1

안녕하세요, 데이터 변경 질문입니다.

0

328

1