본문 바로가기
FullStack/11. JavaScript

ECMAScript 6 - Arrow Function

by nakanara 2019. 12. 19.
반응형

ECMAScript 6 - Arrow Function

 

Arrow Function(화살표 함수)는 함수 표현의 축약형이며 () => {...} 사용하여 함수를 간결하게 표현할 수 있다.
arrow 함수의 경우 this 주의. 자바스크립트의 경우 this는 바인딩 객체가 정의된 것이 아닌 누가 호출하는지에 따라 this 객체가 동적으로 결정되는데 arrow 함수의 경우 this는 상위 스코프의 this이다.

  • 화살표 함수의 경우 call, apply, bind 메소드를 사용하여 this를 변경할 수 없다.


// 함수 사용법
 () => { ... };
(x) => { ... };
 x  => { ... }; // 매개변수가 하나인 경우 소괄호가 없어도 됨.

(x) => { return x }; //return 이 필요한 경우
(x) => x; // 중괄호가 없다면, 암묵적 return
(x) => (x); // 소괄호의 경우, 암묵적 return

(x) => { // 중괄호의 경우 return 표현 필요.
  ...
  return x;
}
// es6
// 화살표 함수의 경우 this는 상위 스코프.
this.nums.forEach((v) => {
    if (v % 5 === 0)
        this.fives.push(v)
})

// es5
//  variant 1
// 일반함수의 경우 this는 
var self = this;
this.nums.forEach(function (v) {
    if (v % 5 === 0)
        self.fives.push(v);
});

//  variant 2
this.nums.forEach(function (v) {
    if (v % 5 === 0)
        this.fives.push(v);
}, this);

//  variant 3 (since ECMAScript 5.1 only)
this.nums.forEach(function (v) {
    if (v % 5 === 0)
        this.fives.push(v);
}.bind(this));

기존의 경우 this를 다른 객체 that에 담아두고 해당 변수에 접근.

function NumberEx() {
  var that = this
  that.num = 0;
  setInterval(function add() {
    // setInterval 안에서의 this 는 NumberEx의 this가 아니므로 다른 변수에 this 를 지정하여 씁니다.
    that.num++;
    console.log(that.num);
  }, 1000);
}

화살표 함수의 경우 자신의 this가 바인드 되지 않기 때문에 상위 스코프의 this 사용

function NumberEx() {
  this.num = 0

  setInterval(() => {
    this.num++ // this is from NumberEx
  }, 1000)
}

참고

반응형

'FullStack > 11. JavaScript' 카테고리의 다른 글

[JS] 날짜 포맷 만들기  (0) 2021.04.20
내부변수를 이용하여 한번 실행  (0) 2020.01.28
Repeat Util  (0) 2020.01.28
JavaScript로 z-index 구하기  (0) 2019.12.21
[JS LIB] 캘린더 라이브러리.  (0) 2013.07.15