// 일반 함수
function function1() {
...
}
// 화살표 함수
const function2 = () => {
...
};
결론부터 말하자면 다음과 같은 차이가 존재한다.
이중 가장 큰 차이는 this이다.
this는 어떤 방식으로 실행하느냐에 따라서 역할이 구분된다.
크게 4가지 방식이 존재한다.
1. 일반 함수 실행 방식(기본 바인딩)
여기서 일반 함수 실행 방식은 this = Global Object가 성립하지만,
화살표 함수를 사용하는 경우에는 화살표 함수가 선언된 부분 스코프의 this context를 this context로 사용한다.
즉 화살표 함수의 this는 상위 스코프의 this를 가리킨다.
function func() {
this.scope = "상위";
return {
scope: "하위",
callScope: function () {
console.log(this.scope);
},
};
}
function arrFunc() {
this.scope = "상위";
return {
scope: "하위",
callScope: () => {
console.log(this.scope);
},
};
}
const function1 = new func();
fun1.callScope(); // 하위
const function2 = new arrFunc();
fun2.callScope(); // 상위