
this는 현재 실행되는 코드의 실행 컨텍스트를 가리킨다.this와 성격이 다르다this는 함수 자신이나 함수의 렉시컬 스코프를 가리키는 레퍼런스가 아니라는 점을 분명히 인지this가 동적으로 변경된다.this란 자기자신을 가리키는것이 아닌 함수 호출 시점에 바인딩되며 무엇을 가리킬지는 전적으로 함수를 호출한 코드에 달려있다.console.log(this); // window 객체
function logFunc() {
console.log(this);
}
logFunc(); // window 객체
/*
global에서 호출하는것은 window에서 호출하는 것과 같다. === window.logFunc()
*/
class LogClass {
log() {
console.log(this);
}
}
const bar = new LogClass();
bar.log(); // LogCLass 객체
class BoB {}
const bob = new Bob();
bob.run = test.log;
bob.run(); // BoB 객체
/*
run() 함수는 bob이 호출했기 때문에 this는 BoB을 가리킨다.
자바스크립트 this라는 정보를 가진 함수를 다른곳에 할당하는 순간 잃어버린다.
*/
class LogClass {
log() {
console.log(this);
}
}
const bar = new LogClass();
const foo = bar.log();
foo(); // undefined
/*
let과 const로 등록된 변수는 윈도우에 등록되어져 있지 않으므로 선언한 변수를
호출하는 것은 global(window)가 아니고 어떤 Object도 아니기 때문에 undefined
*/
bind: 결속시키다, 묶다.
this를 특정 객체로 묶는 역할this는 바인딩 우선순위를 결정하는 표준 바인딩 규칙을 가지고 있다.class LogClass {
log() {
console.log(this);
}
}
const bar = new LogClass();
const foo = bar.log();
foo(); // undefined
const foo2 = bar.log.bind(bar); // bar(LogClass)로 바인딩
단독 함수실행에 관한 규칙으로 나머지 규칙에 해당하지 않을 경우 적용되는 this의 기본 규칙const foo = bar.log;: bar 바인딩이 소실됨call(), apply(): Soft Bindingthis에 바인딩 할 객체를 첫 째 인자로 받아 함수 호출시 객체를 this로 세팅한다.this 바인딩이 도중에 소실되거나 프레임워크가 임의로 덮어져 써버리는 경우 해결 Xbind() Hard Bindingthis 콘텍스트로 원본 함수를 호출하도록 하드코딩된 새 함수를 반환this를 새 객체와 바인딩을 하는 방법() => {}: 선언될 당시에 scope에 this context를 유지this를 바인딩한다.