我想使用闭包来跟踪所有先前的计算,并使用闭包将它们填充到一个对象中,然后仅打印结果,如果命中了密码,则它应该使用先前的操作来控制整个对象的输出。
function saveOutput(func, magicWord) {
let output = {};
let outer = magicWord;
function someWork(x) {
if (x !== outer) {
output.x = func(x);
console.log(output[x]);
} else {
console.log(output);
}
}
}
// /*** Uncomment these to check your work! ***/
const multiplyBy2 = function(num) {
return num * 2;
};
const multBy2AndLog = saveOutput(multiplyBy2, 'boo');
console.log(multBy2AndLog(2)); // => should log 4
console.log(multBy2AndLog(9)); // => should log 18
console.log(multBy2AndLog('boo')); // => should log { 2: 4, 9: 18 }
multBy2AndLog
。为此,您需要从返回someWork
函数saveOutput
。multBy2AndLog(2)
返回值,则需要return output[x]
从someWork
output.x
将一个属性添加x
到output
对象。您需要使用方括号符号output[x]
来添加内部具有值的键x
(JavaScript属性访问:点符号与方括号?)function saveOutput(func, magicWord) {
let output = {};
let outer = magicWord;
// ↓ add return here
return function someWork(x) {
if (x !== outer) {
output[x] = func(x); // not output.x
return output[x]; // <- return the value from the function
} else {
return output;
}
}
}
function multiplyBy2(num) {
return num * 2;
};
const multBy2AndLog = saveOutput(multiplyBy2, 'boo');
console.log(multBy2AndLog(2)); // => should log 4
console.log(multBy2AndLog(9)); // => should log 18
console.log(multBy2AndLog('boo')); // => should log { 2: 4, 9: 18 }
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句