본문 바로가기

ECMAScript 2015, ECMAScript 6th Edition

2. arrow

Lambda란?

The term lambda function may refer to:

출처 : https://en.wikipedia.org/wiki/Lambda_function


람다 function 이란 함수 이름이 없는 익명/무명 함수 지칭



sample

//ES6 arrow function
odds  = evens.map(v => v + 1)
pairs = evens.map(v => ({ even: v, odd: v + 1 }))
nums  = evens.map((v, i) => v + i)

nums.forEach(v => {
   if (v % 5 === 0)
       fives.push(v)
})

//ES5 에서 위와 같은 로직을 작성하려면
odds  = evens.map(function (v) { return v + 1; });
pairs = evens.map(function (v) { return { even: v, odd: v + 1 }; });
nums  = evens.map(function (v, i) { return v + i; });

nums.forEach(function (v) {
   if (v % 5 === 0)
       fives.push(v);
});


Syntax

1. 파라미터가 하나일 때

(param) => (코드);


2. 파라미터가 하나일땐 소괄호() 생략 가능

param => 코드


3. 파라미터가 없을때

() => (코드);


4. 표현식(예 : 1+2) 결과 return

(param) => 표현식


5. return 할 { key: value} 를 소괄호 안에 작성

(param) => ({key: value});


6. 파라미터가 다수 일때

(param1, param2, ...) => ( 코드 );


7. rest 파라미터

(param1, param2, ...rest )=> ( 코드 );


8. 기타

(param1, param2  123) => ( 코드 );

([onw, two] = [10, 20]) => ( 코드 );

({key : value} = { sumValue : 10 + 20 }) => (  코드 );



Lexical this

인스턴스와 오브젝트에서 this 참조가 다름



Lexical this


arrow function instance 내에서 this component 는 기존의 function() {} 의 this component 와 다르다. 아래를 참조하자!!


this.nums.forEach((v) => {
    if (v % 5 === 0)
        this.fives.push(v)
})


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

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


다르니까 잘 주의해서 쓰세요 :) ㅋㅋ

'ECMAScript 2015, ECMAScript 6th Edition' 카테고리의 다른 글

6. Array-like  (0) 2016.09.07
5. rest  (0) 2016.09.07
4. spread  (0) 2016.09.06
3. iterable protocol  (0) 2016.09.04
1. let, const  (0) 2016.09.04