프로그래밍 언어/JavaScript

[자바스크립트 필기] #16 - ES6 함수의 추가 기능

SpaceCowboy 2021. 8. 10. 23:24

 

*이 필기는 웹 프로그래밍 튜토리얼에서 보고 작성합니다. 

 

1. 함수의 구분 

ES6 이전에는 동일한 함수라도 다양한 형태로 호출할 수 있었다. 

var foo = function () {
    return 1;
};

// 일반적인 함수
foo(); // -> 1

// 생성자 함수
new foo(); // -> foo {}

// 메서드 
var obj = { foo: foo};
obj.foo(); // -> 1

이 처럼 ES6 이전의 모든 함수는 일반 함수로서 호출할 수 있느 것은 물론 생성자 함수로서 호출할 수 있다. 

그래서 혼란스럽고 실수를 유발할 가능성이 있고 성능에도 좋지않다. 

그래서 ES6에서는 함수를 사용 목적에 따라 세 가지 종류로 명확히 구분했다. 

ES6 함수의 구분 constructor prototype super arguments
일반 함수 O O X O
메서드 X X O O
화살표 함수  X X X X

 

2. 메서드 

ES6 기준으로 메서드는 메서드 축약 표현으로 정의된 함수만을 의미한다. 

이 축약형으로 정의한 메서드는 인스턴스를 생성할 수 없는 non-constructor다. 

const obj = {
    x: 1,
    // foo는 메서드다 
    foo() {
        return this.x;
    },
    // bar에 바인딩된 함수는 일반 함수다. 
    bar: function() {
        return this.x;
    }
};

console.log(obj.foo()); // 1
console.log(obj.bar()); // 1

 

3. 화살표 함수 

function 키워드 대신 화살표( => )를 사용해서 간략하게 함수를 정의하는 방식이다. 

const multiply = (x, y) => x * y;
multiply(2, 3) // -> 6

 

함수 정의

무조건 함수 표현식으로 정의해야한다. 

 

매개변수 선언 

  • 여러개인 경우 소괄호 () 안에 매개변수를 선언한다. 
  • 한개라면 생략할 수 있다. 
  • 없는 경우에는 생략할 수 없다. 

함수 몸체 정의

함수 몸체가 하나의 문으로 구성된다면 중괄호 {} 를 생략할 수 있다. 

 

화살표 함수와 일반 함수의 차이

  • 화살표 함수는 non-constructor다.
  • 중복된 매개변수 이름을 선언할 수 없다. 
  • 화살표 함수는 함수 자체의 this, arguments, super, new.target 바인딩을 갖지 않는다. - 따라서 상위 스코프에서 참조를 한다. 

4. Rest 파라미터 

기본문법 

매개변수 이름 앞에 세개의 점 ... 을 붙인다. 이 Rest 파라미터는 함수에 전달된 인수들의 목록을 배열로 전달받는다. 

function foo(...rest) {
    console.log(rest); // [1, 2, 3, 4, 5]
}

foo(1, 2, 3, 4, 5);
  • Rest 파라미터는 반드시 마지막 파라미터이어야 한다. 
  • 단 하나만 선언할 수 있다. 

 

5. 매개변수 기본값

function sum(x = 0, y = 0) {
    return x + y;
}

console.log(sum(1, 2)); // 3
console.log(sum(1)); // 1

이러한 기본값은 인수를 전달하지 않은 경우와 undefined를 전달한 경우에만 쓸 수 있다. 

 

여기까지 입니다 - 틀린 점이 있다면 꼭 지적해주세요!