재활을 위한 기본서 학습 (이라고 쓰고 기술 면접 대비라고 읽는다)을 하다 보면 예전에 머리아프던 게 5ms 정도 만만하게 느껴지고 그렇지...
최초에 전역에서 함수선언문을 통해 생성된 함수 sayName
이 있다.
sayName
은 자신이 속한 유효 범위, this의 name 프로퍼티
를 콘솔에 표시한다.
새로 생성한 리터럴 객체 obj
에 메서드로 sayName
을 할당한다.
전역에서 자유 함수
로 호출한 sayName은 전역 변수 name
을,
객체 obj의 메서드
로 호출한 sayName은 obj 프로퍼티 name
을 표시한다.
함수가 객체의 매서드로 할당될 때 복제된 건 아닐까? 싶지만 두 함수는 동일한 함수 객체가 맞다.
그렇다면, this는
함수가 생성되는 선언 시점이 아닌 함수 본체가 실행되는 호출 시점
에 정해진다.
함수는 자신이 선언된 시점의 외부 환경을 기억한다. 클로저의 복습이다.
렉시컬환경은 함수가 기억하는 자기 고향이다
. 고향은 날 때 정해져 바뀌지 않는다.
this는 함수가 지금 현재 살고 있는 집이다
. 이사가면 바뀌어야지.
코드 블록 예쁜거 많던데 맨날 이렇게 개발자도구 콘솔이나 스크린샷 찍고 있으면 안된다고 생각은 하고 있다. 예쓰예쓰...