this
: 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리키는 자기 참조 변수
this는 자바스크립트 엔진에 의해 암묵적으로 생성, 함수를 호출하면 this가 암묵적으로 함수 내부로 전달된다.
this 바인딩은 함수 호출 방식에 의해 동적으로 결정된다!!!
전역 객체
가 바인딩된다!어떤 함수라도 일반 함수로 호출된다면 전역 객체에 바인딩된다!!
콜백 함수를 일반 함수로 호출되면 this가 전역 객체를 가리키게 되는 문제가 있었다. -> 이를 ES6에서 도입된 화살표 함수
로 해결할 수 있다.
function f(i,i) {return i+i}
f(2,2) // 4
const a = (i,i) => i+i; // SyntaxError
콜백 함수의 this와 외부 함수의 this가 다르다는 문제점을 화살표 함수 등장 전에는 다음과 같이 해결했다
...
method(a) {
const that = this;
return a.map(function (item) {
return that.~~~
})
}
ES6에서는 화살표 함수를 사용하여 콜백 함수의 this와 외부 함수의 this가 다른 문제를 해결할 수 있다!
...
method(a) {
return a.map((item) => this.~~~
}
화살표 함수가 this 바인딩을 가지지 않기 때문에, 상위 스코프의 this를 참조한다.=> 이를 lexical this
라고 한다. 화살표 함수의 this가 함수가 정의된 위치에 의해 결정된다는 의미이다.
메서드를 화살표 함수로 정의하면 안된다!!
-> 이 경우 this가 메서드를 호출한 객체에 바인딩되는 것이 아니라 전역 객체에 바인딩된다!