[자바스크립트] 다시 보는 화살표 함수
글 작성자: 망고좋아
반응형
화살표 함수
- 화살표 함수는 단순히 함수를 ‘짧게’ 쓰기 위한 용도로 사용되지 않는다.
- 자바스크립트에선 함수를 생성하고 그 함수를 어딘가에 전달하게 되면 함수의 컨텍스트를 잃을 수 있다.
- 이럴 때 화살표 함수를 사용하면 현재 컨텍스트를 잃지 않는다.
화살표 함수에는 'this’가 없다!
- 화살표 함수엔 this가 없기 때문에 외부에서 값을 가져온다.
let group = {
title: "1모둠",
students: ["보라", "호진", "지민"],
showList() {
this.students.forEach(
student => alert(this.title + ': ' + student)
// 1모둠: 보라, 1모둠: 호진, 1모둠: 지민
);
}
};
group.showList();
forEach
에서 화살표 함수를 사용했기 때문에 화살표 함수 본문에 있는this.title
은 화살표 함수 바깥에 있는 메서드인showList
가 가리키는 대상과 동일해진다. (this.title
은group.title
과 같다.)- 위 상황에서 일반 함수를 사용했다면 에러 발생!
⚠️ 화살표 함수는 new
와 함께 실행할 수 없다.
this
가 없기 때문에 화살표 함수는 생성자 함수로 사용할 수 없다는 제약이 있다.
화살표 함수엔 'arguments’가 없다!
- 화살표 함수는 모든 인수에 접근할 수 있게 해주는 유사 객체 배열
arguments
를 지원하지 않는다. - 이러한 특징으로 현재
this
값과arguments
정보를 함께 실어 호출을 포워딩해 주는 데코레이터를 만들 때 유용하게 사용된다.
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
};
}
function sayHi(who) {
alert('안녕, ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("철수"); // 2초 후 "안녕, 철수"가 출력된다.
- 데코레이터
defer(f, ms)
는 함수를 인자로 받고 이 함수를 래퍼로 감싸 반환하는데, 함수f
는ms
밀리초 후에 호출된다.
📌 참고
반응형
'프로그래밍 > JavaScript' 카테고리의 다른 글
[자바스크립트] 프로토타입 상속 (0) | 2021.07.16 |
---|---|
[자바스크립트] getter와 setter (0) | 2021.07.15 |
[자바스크립트] JSON.stringify(value), JSON.parse() (0) | 2021.07.13 |
[자바스크립트] 타이머 관련 메소드(setTimeout, clearTimeout, setInterval), 중첩 setTimeout (0) | 2021.07.12 |
[자바스크립트] 변수의 유효범위와 클로저 (0) | 2021.07.10 |
댓글
이 글 공유하기
다른 글
-
[자바스크립트] 프로토타입 상속
[자바스크립트] 프로토타입 상속
2021.07.16 -
[자바스크립트] getter와 setter
[자바스크립트] getter와 setter
2021.07.15 -
[자바스크립트] JSON.stringify(value), JSON.parse()
[자바스크립트] JSON.stringify(value), JSON.parse()
2021.07.13 -
[자바스크립트] 타이머 관련 메소드(setTimeout, clearTimeout, setInterval), 중첩 setTimeout
[자바스크립트] 타이머 관련 메소드(setTimeout, clearTimeout, setInterval), 중첩 setTimeout
2021.07.12