const add = function(one, two) { return one + two; }; console.log(add(1, 2)); const total = (one, two) => { return one + two; }; console.log(total(1, 2)); // 3 // 3
const total = (one, two) => one + two; console.log(total(1, 2)); // 3
화살표 함수에서 함수 블록과 return 작성을 생략할 수도 있습니다.
⇒ 파라미터 값이 1개일 경우 괄호도 생략 가능합니다.
const total = (one) => { }; console.log(total(1)); // undefined
함수 블록{ }만 작성한 형태
const point = (param) => ({book: param}); const result = point("책"); for(const key in result){ console.log(key + ": "+result[key]); }; // book: 책
{key: value}를 반환하는 형태
⇒ {key: value}를 소괄호로 감싸면 {key: value}를 반환합니다. 만약 소괄호를 작성하지 않는다면 undefined를 반환합니다.
const get = param => param + 20; console.log(get(10)); // 30
파라미터가 하나일 경우
const get = () => 10 + 20; console.log(get()); // 30
파라미터가 없으면 소괄호만 작성합니다.
화살표 함수는 function을 => 로 표기하는 것만이 전부가 아닙니다. 화살표 함수는 일반 함수와 구조가 다릅니다.
const book = function(){ return 100; }; const point = () => 100;
화살표 함수에서는 arguments를 사용할 수 없습니다. 대신 rest parameter를 사용합니다.
const point = () => { try { const args = arguments; } catch(error) { console.log("arguments사용 불가"); }; }; point(10, 20); // arguments 사용 불가
"use strict" function book() { function getPoint() { console.log(this); }; getPoint(); // window.getPoint() }; window.book(); // undefined
"use strict" var point = 100; function sports() { const getPoint = () => { console.log(this.point); }; getPoint(); }; window.sports(); // 100
"use strict" const book = { point: 500, getPoint: function() { console.log(this.point); } }; book.getPoint(); // 500
일반 함수인 book.getPoint()를 호출하면 함수 안에서this가 book 오브젝트를 참조합니다. 그렇기에 console에 500이 출력됩니다
var point = 100; const sports = { getPoint: () => { console.log("this.point", this.point); } }; sports.getPoint(); // this.point 100
var title = "책"; const book = { show: () => console.log(this.title); }; book.show();
인스턴스에서 화살표 함수의 작성 위치에 따라 this가 참조하는 오브젝트가 다릅니다.
var point = 200; const Point = function() { this.point = 100; }; Point.prototype.getPoint = () => { console.log(this.point); }; new Point().getPoint(); // 200
const Point = function() { this.point = 100; }; Point.prototype.getPoint = function() { const add = () => this.point + 20; console.log(add()); [1, 2].forEach((value) => { console.log(this.point + value); }) }; new Point().getPoint(); // 120 // 101 // 102