728x90
🚨 this 정의
📍 일반 함수와 화살표 함수에서의 this정의
일반 함수는 호출 위치에 따라 this를 정의한다.
화살표 함수는 자신이 선언된 함수 범위에서 this를 정의한다.
const siot = {
name : 'siot',
normal : function () {
console.log(this.name)
},
arrow : () => {
console.log(this.name)
}
}
siot.normal() // siot
siot.arrow() // undefined
* 일반함수를 할당할 때는 콜론과 function이 생략가능하다.
const siot = {
name : 'siot',
normal() {
console.log(this.name)
}
}
siot.normal() // siot
💡 화살표 함수를 사용해야만 하는 경우
📍 콜백 일반 함수
다음의 setTimeout메서드에서 콜백함수로 일반 함수를 할당하게 되면(호출 위치에서 정의) this는 setTimeout로직 안에서 실행된다. 결과적으로 timer.timeout()은 값이 정의될 수 없다.
const timer = {
name : 'siot',
timeout : function () {
setTimeout(function () {
console.log(this.name)
}, 2000)
}
}
timer.timeout() // undefined
📍 콜백 화살표 함수
콜백함수로 화살표 함수를 할당하게 되면 그 자체에서 this가 정의되기 때문에 제대로 동작된다. 대표적으로 setTimeout과 같이 콜백을 인수로 쓰는 형태에서는 화살표 함수를 쓸 경우 this를 사용할 수 있게 된다.
const timer = {
name : 'siot',
timeout : function () {
setTimeout(() => {
console.log(this.name)
}, 2000)
}
}
timer.timeout() // siot
728x90
'FE' 카테고리의 다른 글
JS 데이터 API / Array 메소드 (0) | 2021.11.12 |
---|---|
JS 데이터 API / String, Number, Math (0) | 2021.11.07 |
생성자 함수와 ES6 Classes클래스 / 객체의 로직이 동일하게 반복될 때 (0) | 2021.11.06 |
타이머 함수 Timeout Interval / 콜백함수 (0) | 2021.11.06 |
호이스팅을 이용해 로직 파악을 빠르게 (0) | 2021.11.06 |