오늘 배운 것
느낀 점
_.memoize = function(func) {
let memo = {};
return function(){
let key = Array.prototype.join.call(arguments, ',')
if(key in memo){
return memo[key];
}
else{
memo[key] = func(...arguments);
return memo[key];
}
}
};
위의 코드에서 서로 다른 인자를 받았을 시 저장되어 있는 값을 불러내지 않고 func(...arguments)를 실행해야 함에도, [1, 2, 3]을 인자로 받아 실행 후 (1, 2, 3)을 인자로 받으면 저장되어 있는 값을 불러내어 실행되었다. 원인을 알아보니
let key = Array.prototype.join.call(arguments, ',')
위의 코드를 실행할 시 두 인자 모두 key가 "1,2,3"이 된다는 것을 파악했다. 이를 해결하기 위해 JSON.stringify를 사용하여,
_.memoize = function(func) {
let memo = {};
return function(){
let key = JSON.stringify(arguments);
if(key in memo){
return memo[key];
}
else{
memo[key] = func(...arguments);
return memo[key];
}
}
};
위의 코드로 작성하여 모든 검사가 정상적으로 통과되었다. JSON의 유용함을 느꼈고, 앞으로도 잘 활용해야겠다는 생각이 들었다.
내일 할 일
underbar advanced 과제 마무리
recursion advanced 과제