const num = 3
let doubleNum = function(num) {
return num * 2
};
function double(num) {
return num * 2;
}
function doubleNum(func, num) {
return func(num)
}
let output = doubleNum(double, 4);
console.log(output); //8
function adder(added) {
return function(num) {
return added + num;
}
let output = adder(5)(3) // -> 8
let add5 = adder(5)
console.log(add5(3)) // -> 8
_.each = function (collection, iteratee) {
if (Array.isArray(collection)) {
//배열 일 경우
for (let i = 0; i < collection.length; i++) {
iteratee(collection[i], i, collection);
}
} else if (typeof collection === "object") {
//객체일 경우
for (let i = 0; i < Object.keys(collection).length; i++) {
iteratee(Object.values(collection)[i], Object.keys(collection)[i], collection);
}
}
};
⇒ 배열일 경우, 객체일 경우를 다르게 분기시켜 적용한다._.reduce = function (arr, iteratee, initVal) {
let total = 0;
let newArr = [];
if (initVal !== undefined) {
total = initVal;
newArr = arr;
} else {
total = arr[0];
newArr = _.slice(arr, 1);
}
_.each(newArr, function (el, idx, newArr) {
total = iteratee(total, el, idx, newArr);
});
return total;
};
⇒ reduce는 initVal(최초값)을 지정 여부를 분기시키고 거기에 따라 total(응축값)을 지정한 뒤,계속 함수 속에 인자를 넣은 값을 쌓은 뒤 return 시켜준다.우리들이 편하게 쓰고 있는 메소드들은 선배 개발자들이 이미 불편함을 느끼고 오랜 시간과 노력 끝에 탄생한 결과물들이다. 이런 것들이 없었다면 아직도 수많은 코드들에 for가 덕지덕지 붙어있지 않을까? 그들의 위대한 결과물에 다시 한 번 감사하며, 나도 훗날 그런 메소드들을 만드는 데 기여하는 contributor가 되고싶다.