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

메론맛캔디·2021년 11월 15일
0

기술면접

목록 보기
29/30

1. 화살표 함수는 인스턴스를 생성할 수 없는 non-constructor이다. 일반함수는 인스턴스를 생성한다.

인스턴스를 생성할 수 없다는 것은 prototype 프로퍼티가 없고, 프로토타입도 생성하지 않는다.
그리고 화살표 함수는 생성자 함수로서 호출을 할 수 없다.

const Func = () => {};

new Func(); // Type Error. Func is not a constructor

2. 화살표 함수는 중복된 매개변수 이름을 선언할 수 없다. 일반 함수는 중복되는 매개변수 이름을 선언할 수 있다.

function Func2 = (a, a) => {
	return a + a
}
Func2(1, 2); // Syntax Error

function Func3 (a, a) {
	return a + a
}
Func2(1, 2); // 4

화살표 함수는 함수 자체의 this, arguments, super, new.target 바인딩을 갖지 않는다.

일반함수는 실행될 때마다 함수 내부에 this라는 객체가 추가된다. 따라서 일반 함수에서는 this가 바인딩 된다.
일반함수 실행시에는 전역(window) 객체를 가리킨다.
그리고 메서드 실행시에는 메소드를 소유하고 있는 객체를 가리킨다.
생성자 실행시에는 새롭게 만들어진 객체를 가리킨다.
일반 함수를 선언할 때 this에 바인딩할 객체가 정적으로 결정되는 것은 아니고, 어떻게 호출되었는지에 따라 this에 바인딩할 객체가 동적으로 결정된다.

반면에 화살표 함수는 선언할 때 this에 바인딩할 객체가 정적으로 결정되며, 화살표 함수의 this는 언제나 상위 스코프의 this를 가리키게된다. 또한 call, apply, bind 메소드를 사용하여 this를 변경할 수 없다.



참고

자바스크립트 Deep Dive
https://hhyemi.github.io/2021/06/09/arrow.html

0개의 댓글