before
Sunny-117 opened this issue · 4 comments
Sunny-117 commented
before(num,fn)接受两个参数,第一个参数是数字,第二个参数是函数,调用before函数num次数以内,返回与fn执行相同的结果,超过num次数返回最后一次fn的执行结果。
CXGBro commented
function before(num, fn) {
let count = 0
let beforeNumRes
return function (...args) {
if (num > count) {
beforeNumRes = fn(...args)
}
count += 1
return beforeNumRes
}
}
let func = before(3, (a, b) => a + b)
console.log(func(1, 2)); // 3
console.log(func(2, 3)); // 5
console.log(func(1, 6)); // 7
console.log(func(1, 8)); // 7
bearki99 commented
function before(num, fn) {
let cnt = 0;
let ans;
return function (...args) {
if (num > cnt) {
ans = fn(...args);
}
cnt++;
return ans;
};
}
闭包应用
veneno-o commented
// 本来想试试迭代器,不过用现闭包才是正解
function before(num, callback){
let res;
return function (...args){
if(num-- > 0){
res = callback(...args)
return res;
}
return res;
}
}
kangkang123269 commented
function before(num, fn) {
let count = 0;
let lastResult;
return function(...args) {
if (count < num) {
lastResult = fn.apply(this, args);
count++;
}
return lastResult;
};
}
let testFn = function(x) { return x * x; };
let beforeTestFn = before(3, testFn);
console.log(beforeTestFn(2)); // 输出 4
console.log(beforeTestFn(3)); // 输出 9
console.log(beforeTestFn(4)); // 输出 16
console.log(beforeTestFn(5)); // 输出 16,因为已经超过了3次调用,所以返回最后一次执行结果。