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