Prev-content
[ECMAScript6] - Arrow function 화살표 함수
류뚝딱
2018. 2. 13. 15:06
1. Arrow function의 선언
Arrow function(화살표 함수)은 function 키워드 대신 화살표(=>)를 사용하여 간략한 방법으로 함수를 선언할 수 있다.
하지만 모든 경우 사용할 수 있는 것은 아니다. 문법은 아래와 같다.
// 매개변수 지정 방법 () => { ... } // 매개변수가 없을 경우 x => { ... } // 매개변수가 한개인 경우, 소괄호를 생략할 수 있다. (x, y) => { ... } // 매개변수가 여러개인 경우, 소괄호를 생략할 수 없다. // 함수 몸체 지정 방법 x => { return x * x } // single line block x => x * x // 함수 몸체가 한줄의 구문이라면 중괄호를 생략할 수 있으며 암묵적으로 return된다. 위 표현과 동일하다. () => { return { a: 1 }; } () => ({ a: 1 }) // 위 표현과 동일하다. 객체 반환시 소괄호를 사용한다. () => { // multi line block. const x = 10; return x * x; };
2. Arrow function의 호출
Arrow function은 익명 함수로만 사용할 수 있다. 따라서 Arrow function을 호출하기 위해서는 함수표현식을 사용한다.
// ES5 var pow = function (x) { return x * x; }; console.log(pow(10)); // 100
// ES6 const pow = x => x * x; console.log(pow(10)); // 100
또는 콜백함수로 사용할 수 있다. 이 경우 일반적인 함수 표현식보다 표현이 간결하다.
// ES5 var arr = [1, 2, 3]; var pow = arr.map(function (x) { // x는 요소값 return x * x; }); console.log(pow); // [ 1, 4, 9 ]
// ES6 const arr = [1, 2, 3]; const pow = arr.map(x => x * x); console.log(pow); // [ 1, 4, 9 ]
3. this
function 키워드를 사용하여 생성한 일반 함수와 Arrow function와의 가장 큰 차이점은 this이다.
3.1 일반 함수의 this
일반 함수의 경우, 해당 함수 호출 패턴에 따라 this에 바인딩되는 객체가 달라진다. 콜백함수 내부의 this는 전역 객체 window를 가리킨다.
function Prefixer(prefix) { this.prefix = prefix; } Prefixer.prototype.prefixArray = function (arr) { // (A) return arr.map(function (x) { return this.prefix + ' ' + x; // (B) }); }; var pre = new Prefixer('Hi'); console.log(pre.prefixArray(['Lee', 'Kim']));