ES6

4. Arrow Function

으누아빠 2020. 7. 6. 14:22
반응형

Arrow Function

  • 출처: https://www.youtube.com/watch?v=e_lU39U-5bQ [드림코딩 by 엘리]
  • 함수 표현식을 간격하게 표기하는 방법
  • 보다 짧아진 함수 및 바인딩하지 않은 this.
  • always anonymous 항상 익명함수를 이용함
// 매개변수가 없을 경우
() => { ... }

// 매개변수가 한 개인 경우, 소괄호를 생략할 수 있다.  
x => { ... }

// 매개변수가 여러 개인 경우, 소괄호를 생략할 수 없다.  
(x, y) => { ... }

// 한 줄인 경우  
x => { return x * x }  
x => x * x // 함수 몸체가 한줄의 구문이라면 중괄호 및 return 생략 가능  
() => { return a; }

// 여러 줄인 경우  
() => {  
const x = 10;  
return x * x;  
};

예제

기본

const simplePrint = function () {
    console.log('simplePrint!');
}

 //한줄일경우 block을 생략가능하고 return 도 생략가능
const simplePrint = () => console.log('simplePrint!');

argument가 있을경우

const add = function (a, b) {
    return a + b;
}

const add = (a, b) => a + b; //한줄일경우 block을 생략가능하고 return 도 생략가능

block 내의 코드가 여러줄인경우

const simpleMultiply = (a, b) => {
    //do something more
    return a * b;
}

일반함수와 Arrow function의 this 차이

  • Arrow function 의 this 는 바인딩 되지 않고 상위 함수의 this를 가져온다.

일반함수 기본

function Person() {
    this.name = 'kang';
    console.log(this); // 결과값 Person { name: 'kang' }

    // 함수의 내부함수,콜백함수에서 사용되는 this 는 window임
    setTimeout(function() {
        console.log(this); // 결과값 window 객체반환
        console.log(this.name); // 결과값 undefiend 
        //window에는 name 이라는 key 가 없기 때문
    },1000);
}

const g = new Person();

화살표 함수

  • 화살표 함수의 this는 코드 바깥의 함수의 this를 사용함
  • 즉 settimeout의 내의 this 가 아닌 화살표 함수를 감싸고 있는 person함수의 this를 받게 된다.
function Person() {
    this.name = 'kang';
    console.log(this); //Person { name: 'kang' }

    setTimeout(() => {
        console.log(this); // 결과값 Person { name: 'kang' }
        console.log(this.name); // 결과값 kang
    },1000);
}
const g = new Person();

일반함수에 this값을 전달하는 방법 1

function Person() {
    this.name = 'kang';
    console.log(this); //Person { name: 'kang' }

    const that = this;
    setTimeout(function() {
        console.log(that); // 결과값 Person { name: 'kang' }
        console.log(that.name); // 결과값 kang
    },1000);
}
const g = new Person();

일반함수에 this값을 전달하는 방법 2

function Person() {
    this.name = 'kang';
    console.log(this); //Person { name: 'kang' }

    setTimeout(function() {
        console.log(this); // 결과값 Person { name: 'kang' }
        console.log(this.name); // 결과값 kang
    }.bind(this),1000);
}
const g = new Person();

'ES6' 카테고리의 다른 글

6. Template Literals  (0) 2020.07.08
5. classes 클래스  (0) 2020.07.07
3. let, const  (0) 2020.07.03
2. Bable 을 이용한 ES6 변환  (0) 2020.07.03
1. ES6 기본정의  (0) 2020.07.03