WEBn/JavaScript
JavaScript - 아직도 function 쓰니? (feat. Arrow function)
Pastel Whale
2021. 6. 30. 00:00
이번 주제는 Arrow function 입니다. 화살표 함수는
ES6 문법으로 자바스크립트에서
간단하게 함수를 표현할 수 있어요.
// generic function
var apple = function () { console.log("apple") }; // apple
// Arrow function
var apple = () => console.log("apple"); // apple
언뜻보면 function하나 없어진 거 아닌가? 싶지만 한번 Arrow 함수를 쓴 사람은
다시 function을 쓰는 때로 돌아가기 어려울 정도로 편리하고 좋습니다
사용시에 몇가지 규칙이 있습니다. 자세히 알아봅시다.
1. 기본형
- 함수 표현식으로 사용 가능하다. → var 함수명 = function() { } 형태의 함수식
- function 대신에 =>을 넣는다. =>은 우측의 표현식을 평가하고, 평가 결과를 반환한다.
- Arrow 함수는 항상 익명함수입니다.
나머지는 이하 동일합니다
//befor ::
var add = function (x1, x2) {
var sum = x1 + x2;
return sum;
};
//after ::
var add = (x1, x2) => {
var sum = x1 + x2;
return sum;
};
2. 여러가지 유형
1) 본문이 한 줄인 경우
- return 지시자도 안써도 된다.
//before::
var now = function (time) {};
//after::
var now = (time) => {};
2) 매개변수가 하나인 경우
- 매개변수의 괄호를 생략할 수 있다.
//before::
var say = function(message) {};
//after::
var say = (message) => {};
3) 매개변수가 없을 경우
- ()괄호를 비워놓는다. 이때 괄호는 생략할 수 없다.
//before::
var say = function() {};
//after::
var say = () => {};
3. 바인딩 되지 않는 this
일반 함수에서 this 키워드는 함수를 호출 한 객체를 나타낸다. 이 this가 일반 함수와 Arrow 함수의 가장 큰 차이점이다.
3.1 일반 함수의 this
자바스크립에서는 this에 바인딩할 어떤 객체가 동적으로 결정된다. 즉, 함수를 호출할 때마다 어떻게 호출했는지에 따라 this에 바인딩할 객체가 달라진다.
예를 들면 이런식으로 this는 얼마든지 바뀔 수 있다.
// 브라우저에서
this == window // true
// 함수에서
function sun() {
console.log("sun's this", this); //window
}
sun();
// 메소드에서
let person = {
name: "John",
say: function () {
console.log(this.name); //person
}
}
3.2 Arrow 함수의 this
Arrow 함수에서는 함수를 선언할 때 this가 정적으로 결정된다. Arrow 함수에서 this는 언제나 상위 scope의 this를 가리킨다. 예제를 보자.
const apple = "풋사과";
const fruit = {
apple: "홍로",
box() {
console.log(this); // this === fruit
const seed = () => {
console.log(apple); // 풋사과
console.log(this); // fruit
console.log(this.apple); // 홍로
}
}
}
이렇게 fruit 객체 안에 선언된 seed 함수의 this는 fruit 객체를 가리킨다. 즉, Arrow 함수에서는 this가 정적으로 고정된다.