function once(func) {
// 여기에 func 변수가 있다고 의식해야 쉽다.
let alreadyCalled = false;
let result;
// 이상의 func, alreadyCalled, result 변수는
// 아래의 add 변수에 클로저로 남는다.
return function() {
if(!alreadyCalled) {
alreadyCalled = true;
result = func.apply(null, arguments); // func 변수에 담긴 함수를 호출한다.
}
return result;
}
}
let add = once(function(a, b) {
return a + b;
});
add(1, 2); // 3
add(3, 4); // 3
add(5, 6); // 3