- 실행 컨텍스트에 따라 달라지는 this
- 암시적 바인딩
- 전역 공간에서 this는 전역 객체를 참조
- 함수가 함수로서 호출될 경우, this는 전역 객체를 참조
- 함수가 메서드로 호출될 경우, this는 메서드를 호출한 객체를 참조
- 생성자 함수 내에서 this는 생성될 인스턴스를 참조
- 명시적 바인딩
- call, apply, bind 메서드를 사용하여 함수나 메서드를 호출할 때 this를 명시적으로 바인딩
- call
- 함수로 전달할 인자가 고정
func.call(this, arg1, arg2);
- apply
- 함수로 전달할 인자가 가변
func.apply(this, [arg1, arg2]);
- bind
- this값이 설정된 새로운 함수를 반환
const bindFunc = func.bind(this)
- 정적 바인딩
- 화살표 함수는 상위 스코프의 this를 바인딩
- 함수가 정의된 시점(실행 시점이 아닌)의 this 바인딩
this === window(global) // true
-
const a = {name: "a"};
const b = {name: "b"};
function print(){
console.log(this.name);
}
a.print = print;
b.print = print;
a.print(); // a
b.print(); // b
print(); // fcClassroom