我有一个函数,当被调用时将减少1。它在用户报告某些内容时被调用。我希望能够存储它,然后在它达到0时执行一个动作。
function userReported() {
console.log('user report ' + add());
var add = (function () {
var counter = 10;
return function () {
counter -= 1;
return counter;
}
})();
}
现在的问题是我可以返回计数器,使其从10开始注销。但是我遇到的问题是,我似乎可以在返回计数器之前添加if / else,因为它不存储变量。
我尝试了以下操作,但是它不起作用,并且我不知道如何返回某些内容>存储它,同时检查其值。我也尝试了一次while循环,但也失败了。
function userReported() {
var limit = add;
if ( limit <= 0 ) {
console.log('Link does not work!');
}
else {
console.log('user report ' + limit);
}
var add = (function () {
var counter = 10;
return function () {
counter -= 1;
return counter;
}
})();
}
我该如何创建一个值,递增/递减所说的值,然后在达到一个数字时->做点什么?
答案 0 :(得分:2)
通常,您可以使用一个函数来执行此操作,该函数返回一个在闭包中捕获计数器的函数。这样可以使返回的函数在多个调用中保持状态。
例如:
function createUserReport(limit, cb) {
console.log('user report initiated' );
return function () {
if (limit > 0) {
console.log("Report filed, current count: ", limit)
limit--
} else if (limit == 0) {
limit--
cb() // call callback when done
}
// do something below zero?
}
}
// createUserReport takes a limit and a function to call when finished
// and returns a counter function
let report = createUserReport(10, () => console.log("Reached limit, running done callback"))
// each call to report decrements the limit:
for (let i = 0; i <= 10; i++){
report()
}
您当然可以对回调功能进行硬编码,并将数字限制为函数本身,而不用传入参数。
答案 1 :(得分:1)
好吧,如果您需要基于外部限制获取报告,则可以执行以下操作:
var limit = 10;
function remove() {
limit -= 1;
}
function userReport() {
if (limit <= 0) {
console.log("Link does not work!");
} else {
remove();
console.log(`User report: ${limit}`);
}
}
userReport();
如果这是您想要的,从userReport中删除remove函数并取出limit变量将使一切正常