callable
이며, constructor
이다constructor
라는 것은 protytype
프로퍼티를 가지며, 프로토타입 객체도 생성한다는 것을 의미하기 때문에 성능 면에서도 문제가 있다npn-constructor
인 ES6의 메서드와 화살표 함수가 등장했다non-contructor
다. 따라서 생성자 함수로 호출할 수 없다[[HomeObject]]
를 갖는다[[HomeObject]]
를 갖지 않기 때문에 super
키워드를 사용할 수 없다this
가 전역 객체를 가리키는 문제를 해결하기 위한 대안으로 유용하다non-cunstructor
다this
, arguments
, super
, new.target
바인딩을 갖지 않는다this
바인딩은 함수의 호출 방식, 즉 함수가 어떻게 호출되었는지에 따라 동적으로 결정된다. 주의할 것은 일반 함수로서 호출되는 콜백 함수의 경우다class Prefixer { constructor(prefix) { this.prefix = prefix; } add(arr) { // add 메서드는 인수로 전달된 배열 arr을 순화하며 배열의 모든 요소에 prefix를 추가한다 return arr.map(function (item){ return this.prefix + item; // TypeError }); } } const prefixer = new Prefixer("-webkit-"); console.log(prefixer.add(['transition', 'user-select']));
Array.prototype.map
메서드가 콜백 함수를 일반 함수로서 호출하기 때문에 this
가 전역 객체를 가리키게 된다strict mode
가 암묵적으로 적용되고, 이 경우 this
에는 undefined
가 바인딩된다super
바인딩을 갖지 않는다super
를 참조하면 상위 스코프의 super
를 참조한다arguments
바인딩을 갖지 않는다arguments
를 참조하면 상위 스코프의 arguments
를 참조한다Rest
파라미터는 함수에 전달된 인수들의 목록을 배열로 전달받는다function foo(param, ...rest) { console.log(param); // 1 console.log(rest); // [2, 3, 4, 5] } foo(1, 2, 3, 4, 5);
Rest
파라미터는 먼저 선언된 매개변수에 할당된 인수를 제외한 나머지 인수들로 구성된 배열이 할당된다arguments
객체는 함수 호출 시 전달된 인수들의 정보를 담고 잇는 순회 가능한 유바 배열 객체이며, 함수 내부에서 지역 변수처럼 사용할 수 있다arguments
객체는 유사 배열 객체이므로 배열 메서드를 사용하기 번거로웠다. ES6의 Rest
파라미터는 배열로 직접 전달받을 수 있기 때문에 유용하다Rest
파라미터를 사용해야 한다undefined
다function sum(a = 0, b = 0) { return a + b; } console.log(sum(1)); // 1