ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JavaScript - 아직도 function 쓰니? (feat. Arrow function)
    WEBn/JavaScript 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가 정적으로 고정된다.

     

    댓글

Designed by Tistory.