함수
항상 궁금하던건데… 왜 javascript 쓰시는 분들중에서는 함수를 정의할 때
function funcName(a, b) { … }
가 아니라
const funcName = (a, b) => { … }
이렇게 쓰시는 분들이 많이 보이던데, 어떤 차이가 있는건가요?
function으로 정의하면 나중에 funcName에 다른거를 할당시켜 버릴 수도 있기 때문인가요?
그런 경우라면
var funcName = (a, b) => { … }
let funcName = (a, b) => { … }
둘 중에 어떤거랑 같은걸까요?
말씀하신 두 가지는 크게 함수라고 부를 수도 있지만 es5의 function과 es6의 arrow function으로 서로 다른 문법입니다. 다른 문법이기 때문에 서로 차이점이 존재합니다.
arrow function의 경우 기존의 function에서 가지고 있는 this, argument, callee, new를 가지고 있지 않습니다. (this의 경우에는 this가 가르키는 서로 context가 다릅니다.) 기존의 function을 사용했던 new funcName() 으로 사용하는 패턴을 사용하려면 es6의 class 문법을 사용하셔야 합니다.
arrow function을 많이 쓰는 이유 중 하나는 문법적으로 간결해지기 때문입니다. 예를 들면 function(){ return ‘foo’; } 의 경우 arrow function을 이용하면 ()=>’foo’ 와 같이 쓸 수 있습니다. 그리고 this의 경우에도 좀 더 살펴보시면 알겠지만 arrow function 내에서 사용했을 때 좀 더 직관적인(우리가 생각하기에 그래야할 것 같은) 대상을 바라보게 됩니다. 언어적으로 성숙해진 es6를 사용한다는 의미에서 arrow function을 사용하는 것이 더 좋아보입니다.