【发布时间】:2021-10-19 01:41:29
【问题描述】:
这是来自现场训练营的考试题。我碰壁了,无法弄清楚为什么代码无法正确执行。我做错了什么?
这是提供的提示:
创建一个接受一个参数的函数
checkerLogger(一个返回布尔值的函数)返回的函数应该具有以下行为: 如果使用参数调用该函数,则调用检查器回调函数并返回其布尔结果。 如果函数在没有任何参数的情况下被调用,则返回回调函数被调用的次数并计算为真或假。
例子:你应该得到什么
const isOdd = num => num % 2 === 1;
const oddCounter = checkerLogger(isOdd);
console.log(oddCounter()); //-> { true: 0, false: 0 }
console.log(oddCounter(3)); //-> true
console.log(oddCounter(2)); //-> false
console.log(oddCounter()); //-> { true: 1, false: 1 }
我的代码:
function checkerLogger (cb) {
const cache = {};
return function (arg){
let result = cb(arg)
if (arg){
return result;
}
if (cache.hasOwnProperty(result)){
cache[result] += 1;
} else {
cache[result] = 0
}
return cache;
}
}
const isOdd = num => num % 2 === 1;
const oddCounter = checkerLogger(isOdd);
console.log(oddCounter()); //-> { true: 0, false: 0 }
console.log(oddCounter(3)); //-> true
console.log(oddCounter(2)); //-> false
console.log(oddCounter()); //-> { true: 1, false: 1 }
我的输出:
{ false: 0 }
true
false
{ false: 1 }
【问题讨论】:
标签: javascript closures javascript-objects