개발 블로깅/Modern script
[2019.04.17] ES6 문법 - arrow Function과 일반 function의 차이
Hello이뇽
2019. 4. 17. 14:03
S6에서 arrowFunction 방식으로 함수를 선언할 수 있다고, 그냥 쓰게 되면 된 통 당한다...
똑같이 함수를 선언하는 방식이긴 하지만 동작하는 기능이 다른 한가지가 있다.
그렇게 공부해도 이해하기 어려운....엄청나게 동적으로 움직이는 그것...
이 빌어먹을 녀석..this
arrow function과 function의 차이는 this의 움직임이 다르다..
# ES5 에서의 this의 움직임
function callFunc(){
return {
foo : 25,
bar : function(){
console.log(this.foo);
}
}
}
callFunc.call({foo:100}).bar(); // 25
위 코드에서 ,callFunc를 {foo:100} 으로 바인딩을 해주고 호출을 하였다. bar 함수 실행으로 콘솔로그를 찍으니 값이 25가 나온다.
왜 그럴까? ES5 function 안의 this는 자신을 가장 마지막으로 품고 있는 scope로 항상 변한다.
# Arrow Function에서의 this의 움직임
function callFunc(){
return {
foo : 25,
bar : () => {
console.log(this.foo);
}
}
}
callFunc.call({foo:100}).bar(); // 100
그러나 arrow Function은, 처음 바인딩 된 스코프 안에서 가리키는 this가 절대 변하지 않는다.
리액트에서 많이 조심해야 한다...
반응형