1. this 라나 뭐라나

this는 함수 자신이나 함수의 렉시컬 스코프를 가리키는 레퍼런스가 아니다!

this는 실제로 함수 호출 시점에 바인딩 되며 무엇을 가리킬지는 전적으로 함수를 호출한 코드에 달렸다.

2. this가 이런 거로군!

암시적 바인딩

function foo() {
	console.log(this.a);
}

var obj = {
	a: 2,
	foo: foo,
}

obj.foo(); // 2

new 바인딩

function foo(a) {
	this.a = a;
}

var bar = new foo(2);
console.log(bar.a); // 2

결국 new는 함수 호출 시 this를 새 객체와 바인딩 하는 방법이며 이것이 'new 바인딩' 이다.

바인딩 우선순위

  1. new로 함수 호출 했는가? → 새로 생성된 객체가 this
  2. call, apply, bind로 호출 했는가? → 명시적으로 지정된 객체가 this
  3. 객체를 소유 또는 포함 형태로 호출 했는가? → 콘텍스트가 this
  4. 그외 경우는 전역 객체가 this, 엄격모드에서는 undefined