INTRO
개발을 진행하면서, 모호했던 javascript의 개념들을
다시 한번 정리하기 위한 포스팅이다.
ES6(2015)의 기능인 화살표 함수에 대해서 알아본다.
0. 서론
- 화살표함수는 간단히 얘기해서,
- 함수를 선언하는 방식을 보다 가독성 좋게 표현해주는 문법이다.
- 아래의 예시를 보자. 명확한 차이를 알 수 있다.
// 기존 함수 선언시
const normal = function(x) {
return x + x;
}
// 화살표 함수 선언시
const arrow = (x) => {
return x + x;
};
- 아래는 특징을 알아본다.
1. 익명 함수로만 사용 가능
- 화살표 함수는 익명함수로만 사용 가능해서, 익명함수의 특성을 따른다.
- 익명함수의 특징은 추후 포스팅에서 다룰 예정이나, 사실 크게 주의해야 할 사항은 없다.
- 선언 전에 사용 가능한지, 불가한지의 차이만 알아둬도 실무에서 코드를 짤 때 실수를 줄일 수 있다.
// 기명 함수(선언적 함수) 사용시
console.log(named(5)); // 10
function named(x) {
return x + x;
}
// 익명 함수 사용시
console.log(anonymous(5)); // Cannot access 'anonymous' before initialization
const anonymous = function (x) {
return x + x;
};
// 화살표 함수는 익명 함수로만 사용 가능
console.log(arrow(5)); // Cannot access 'arrow' before initialization
const arrow = (x) => {
return x + x;
};
2. 생략할 수 있는 것들
- 화살표 함수에서는 아래의 내용들을 생략할 수 있는 특징이 있다.
(1) 매개변수가 1개일 경우 매개변수가 들어갈 공간인 소괄호()를 생략 가능.
(2) 해당 함수의 구문이 1줄로 끝난다면, 함수의 몸체가 들어가는 공간인 중괄호{}와 return 문을 생략 가능.
const skip = x => x + x;
// 생략하지 않았을 경우 아래와 같다.
const nonSkip = (x) =>{return x+x;}
- 매개변수가 없거나 2개 이상이라면 괄호 생략이 불가하다.
3. 자기 자신의 this가 없고, 상위 스코프의 this를 가리킨다.
- 이 부분을 이해하는데 시간이 좀 걸렸다.
- 우선 아래와 같은 예시로 많은 블로그들에서 화살표함수의 this의 특징을 설명한다.
let arrow = {
name: 'choi',
func() {
console.log(this.name); // choi (1) 객체의 프로퍼티 내 this는 객체를 가리킴
const tempFunc = () => {
console.log(this.name); // choi (2) '화살표'함수에서의 this 는 상위 스코프의 this..
};
tempFunc();
},
};
arrow.func();
let normal = {
name: 'choi',
func() {
console.log(this.name); // choi (3) 객체의 프로퍼티 내 this 는 객체를 가리킴
const tempFunc = function () {
console.log(this.name); // undefined (4) 객체 안이든 밖이든, '함수'내의 this 는 전역 객체를 가리킴...
};
tempFunc();
},
};
normal.func();
- 위 예제의 (4)번의 경우를 보면, this를 사용했음에도 불구하고 choi를 가져올 수 없다.
- 그 이유는 일반적인 자바스크립트의 this는 함수 내에서 참조할 경우 전역 객체(브라우저의 경우 window)를 참조하며,
- window 객체에 name 프로퍼티가 없어 undefined가 출력되는 것이다.
- 반면에 화살표함수 내 this 는 상위 스코프의 this를 참조하기때문에, choi를 가져오는 모습을 볼 수 있다.
- 이러한 케이스 때문에 아래와 같이 메서드로 사용할 경우
- 화살표함수를 사용하면 의미가 없다.
let meaningless = {
name: 'choi',
func: () => {
console.log(this.name); // undefined
},
};
meaningless.func();
- 이해하기 어려운 글을 쓰는것 같아 마음이 좋지 않다..
- 우선 위 내용까지만 이해해도 코드를 짤 때 실수를 많이 줄일 수 있다!
- 실제로 this 를 활용하는 순간이 오면 그 때 다시 정리해도 늦지 않다.
- 이외에도 call, bind, apply 등을 이용하여 this 를 변경 가능하나,
- 그 부분은 arrow 함수의 this에만 국한된 것이 아닌 내용이므로
- 본 포스팅이 아닌 별도의 정리가 필요하지 않나 싶다.
- 또한 실무에서 종종 사용되는 setTimeout, addEventListener등에서의 this 가
- 일반 함수일 때, 화살표 함수일 때 어떻게 동작하는지에 대해서도 한번 찾아보면 좋을 것 같다.
마무리
es6의 화살표 함수에 대해 알아보았다.
추가적으로 화살표 함수에 대해 더 깊게 들어가면, 세세하게 많은 개념들이 등장한다.
하지만 이 포스팅에서 정리한 내용정도만 숙지하고 실제 사용해도 크게 무리가 없어보인다.
부족한 부분에 대해선 지속적 보완을...
참고 : https://poiemaweb.com/es6-arrow-function
-퍼가실 때는 출처를 꼭 같이 적어서 올려주세요!
'Dev > [Javascript]' 카테고리의 다른 글
[javascript] 스코프(Scope) (0) | 2023.01.16 |
---|---|
[javascript] 실행 컨텍스트(Execution Context) (1) | 2023.01.10 |
[javascript] ES6 - 템플릿 리터럴(template literals) (0) | 2023.01.04 |
[javascript] var, let, const 차이점 (0) | 2023.01.03 |
[javascript] bootstrap datatable 사용해보기 (0) | 2021.11.03 |