ES6에서 도입된 새로운 함수 표현 방식. 기존의 함수 표현 방식보다 구문이 간결함.
// 기존 함수 표현
function add(a, b) {
return a + b;
}
// 화살표 함수
const arrowAdd = (a, b) => a + b;
function User() {
this.name = 'Kim';
this.sayHi = function () {
console.log('Hello, ' + this.name + ' !');
};
this.sayHiArrow = () => {
console.log(`Hello, ${this.name} !`);
};
}
const user = new User();
user.sayHi(); // Outpit: "Hello, Kim !"
user.sayHi.call({ name: 'Lee' }); // call 메서드 사용, Output: "Hello, Lee !"
user.sayHiArrow(); // Output: "Hello, Kim !"
user.sayHiArrow.call({ name: 'Lee' }); // Output: "Hello, Kim !" (상위 스코프의 this만 참조)
// 일반 함수
function Person(name, age) {
this.name = name;
this.age = age;
}
const person1 = new Person('Kim', 10);
console.log(person1); // Output: Person { name: 'Kim', age: 10 }
// 화살표 함수
const PersonArrow = (name, age) => {
this.name = name;
this.age = age;
};
const person2 = new PersonArrow('Lee', 20); // Output: TypeError: PersonArrow is not a constructor
// 일반 함수
function sum() {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
console.log(sum(1, 2, 3)); // Outpust: 6
// 화살표 함수
const sumArrow = () => {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
};
console.log(sumArrow(1, 2, 3)); // Output: 0[object Object]function require(path) { ... }
// 해결 방법
const sumArrow2 = (...args) => {
let total = 0;
for (let i = 0; i < args.length; i++) {
total += args[i];
}
return total;
};
console.log(sumArrow2(1, 2, 3)); // Output: 6