목표

this 이해하기

브라우저에서의 전역 객체는 `window`  
Node.js에서의 전역 객체는 `global` 

함수 내부에서 this의 동작

var outer = function () {
    var inner = function() {    
        console.log('inner' + this);
    }
    console.log('outer' + this);
    inner();
} 
outer();
  1. 먼저 전역 컨텍스트가 생성이되고 outer()함수를 실행한다.
  2. outer() 실행 컨텍스트가 생성되면서 this는 window 를 바인딩 한다.
    → 5 번째줄 console 실행 : outer object window
  3. inner() 실행 컨텍스트가 생성되고 this는 window 를 바인딩 한다.
    → 3 번째줄 console 실행 : inner object window

메서드 내부에서의 this의 동작

var object = {
    outer : function() {
        var inner = function(){
            console.log('inner' + this);
        }
        console.log('outer' + this);
        inner();
    }
}

object.outer();
  1. 먼저 전역 컨텍스트가 생성이되고 object 객체를 생성한다.
    → 12 번째줄object객체의 메서드 outer() 실행
  2. outer() 실행 컨텍스트가 생성되면서 this는 호출한 주체인 object 를 바인딩 한다.
    → 6 번째줄 console 실행 : outer object object
  3. inner() 실행 컨텍스트가 생성되고 this는 window 를 바인딩 한다.
    → 4 번째줄 console 실행 : inner object window

메서드 내부에서 동작한 outer의 this는 호출한 주체인 object를 바인딩 했다.
이에 반한 함수로서 동작한 inner의 this는 앞서 설명한 window를 바인딩 했다.

콜백 함수 내부에서의 this의 동작

생성자 내부에서의 this의 동작