자바스크립트 입문_부분적용함수 구현
자바스크립트 2021. 5. 9. 18:38(본 포스팅은 위키북스의 '코어자바스크립트' 책을 공부하면서 작성되었습니다_내돈내산)
Object.defineProperty(global, '_',{
value: 'EMPTY_SPACE',
writable: false,
configurable: false,
enumerable: false,
});
const partial2 = function (){
console.log("args: ", arguments)
let originalPartialArgs = arguments;
let func = originalPartialArgs[0];
if (typeof func !== 'function'){
throw new Error('첫 번째 인자가 함수가 아닙니다.');
}
return function() {
let partialArgs = Array.prototype.slice.call(originalPartialArgs,1);
console.log("첫번째 확인",partialArgs);
let restArgs = Array.prototype.slice.call(arguments);
console.log("두번째 확인",restArgs);
for (var i=0 ; i<partialArgs.length ; i++){
if(partialArgs[i] === _){
partialArgs[i] = restArgs.shift();
}
}
return func.apply(this, partialArgs.concat(restArgs));
};
};
const add = function () {
let result = 0;
for (var i=0; i<arguments.length ; i++){
result += arguments[i];
}
return result;
}
let addPartial = partial2(add, 1,2,_,4,5,_,_,8,9);
console.log(addPartial(3,6,7,10));
// 첫번째 확인 [ 1, 2, 'EMPTY_SPACE', 4, 5, 'EMPTY_SPACE', 'EMPTY_SPACE', 8, 9 ]
// 두번째 확인 [ 3, 6, 7, 10 ]
// 55
let dog = {
name: '강아지',
greet : partial2(function (prefix, suffix) {
return prefix + this.name + suffix;
}, '왈왈 '),
};
console.log(dog.greet(' 배고파요!'));
// 첫번째 확인 [ '왈왈 ' ]
// 두번째 확인 [ ' 배고파요!' ]
// 왈왈 강아지 배고파요!
- '비워놓음'을 표시하기 위해 전역객체(global)에 _라는 프로퍼티를 준비하면서 삭제, 변경 등의 접근에 대한 방어차원에서 여러가지 프로퍼티 속성을 설정함.
- 처음 넘겨준 인자들 중 _ 로 비워놓은 공간마다 나중에 넘어온 인자들이 차례대로 끼워넣도록 구현함.
- addPartial은 partial2의 return으로 넘어온 함수를 할당받고 있다가 두번째에서 추가적인 argument가 들어오면 함수가 실행되도록 설계되어있음 << 클로저 이용 ( 외부함수의 인자까지 받아서 실행됨 )
'자바스크립트' 카테고리의 다른 글
자바스크립트 입문_프로토타입(prototype) (0) | 2021.05.19 |
---|---|
자바스크립트 입문_커링함수(currying function) (0) | 2021.05.09 |
자바스크립트 입문_접근권한제어(정보은닉) (0) | 2021.05.09 |
자바스크립트 입문_콜백함수 내부에서 외부 데이터를 사용하고자 할때 (0) | 2021.05.09 |
자바스크립트 입문_클로저와 메모리 관리 (0) | 2021.05.09 |