인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

초랑이님의 프로필 이미지
초랑이

작성한 질문수

코어 자바스크립트

this

메서드 안에서의 함수 질문입니다.

작성

·

236

1

var obj = {

    a: 20,

    b: function(){

        console.log(a);

        function c(){

            console.log(a);

        }

        c();

    }

}

obj.b();

 

올바른 질문인지 잘 모르겠습니다만... 이 예제의 코드에서 c 부분이 궁금한데요..

저 c라는 함수의 this는 window라고 이해했는데, 그렇다면 저 c라는 함수는 이미 전역컨텍스트가 실행될 때

실행 문맥의 식별자 (Lexical enviroment) 에 의해서 이미 수집이 되어 있는건가요?

답변 1

1

정재남님의 프로필 이미지
정재남
지식공유자

obj.b 메서드를 호출할 때 obj.b에 대한 실행컨텍스트의 변수 수집 및 this바인딩이 이뤄지듯이

마찬가지로 c함수에 대한 this 바인딩은 c함수를 호출할 때 비로소 이뤄집니다.

c함수에 this가 window(전역객체)로 바인딩되는 이유는...

자바스크립트가 그냥 그렇게 생겼습니다 ㅠ

아무튼 '동적 바인딩'이라는 개념을 잘 생각해 보시기 바랍니다.

this는 '선언될 때'가 아니라, '호출될 때' 정해집니다.

호출되는 시점에 해당 함수를 메소드로써 호출했는지, 함수로써 호출했는지에 따라 달라지는 거에요.

초랑이님의 프로필 이미지
초랑이

작성한 질문수

질문하기