let func = (arg1, arg2 ...argN) => expression
let func = function(arg1, arg2 ...argN){
return expression;
}
// 예를 들면...
let sum = (a, b) => a + b // 라는 표현은 아래 함수의 축약 버전임
let sum = function(a, b){
return a + b
}
// 화살표 함수에서 괄호()는 받아오는 인수를 의미한다.
// 인수가 1개 일때 : 생략 해도됨
let double = n=> n*2
// 인수가 없을 때 : 생략 안됨
let sayHi = () => alert('HELLO!!!');
let f1 = () => () => 1
let sum = (a, b) => {
let result = a + b
return result;
}
(3항 연산 가능함)
let age = prompt('Tell me your age', 18);
let welcome = (age < 18) ?
() => alert('안녕') :
() => alert('안녕하세요');
let group = {
title: "1모둠",
students: ["보라", "호진", "지민"],
showList() {
this.students.forEach(
student => alert(this.title + ': ' + student)
);
}
};
let group = {
title: "1모둠",
students: ["보라", "호진", "지민"],
showList() {
this.students.forEach(function(student) {
// TypeError: Cannot read property 'title' of undefined
alert(this.title + ': ' + student)
});
}
};
function defer(f, ms) {
return function() {
setTimeout(() => f.apply(this, arguments), ms)
};
}
function sayHi(who) {
alert('안녕, ' + who);
}
let sayHiDeferred = defer(sayHi, 2000);
sayHiDeferred("철수"); // 2초 후 "안녕, 철수"가 출력됩니다.
// 일반 함수에선 setTimeout에 넘겨주는 콜백 함수에서 사용할 변수 ctx와 args를 반드시 만들어야 한다.
function defer(f, ms) {
return function(...args) {
let ctx = this;
setTimeout(function() {
return f.apply(ctx, args);
}, ms);
};
}