javascript - Javascript 从 10 递减,然后在 0 时执行某些操作
问题描述
我有一个函数,调用时会减少 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;
}
})();
}
我如何去创建一个值,增加/减少所说的值,然后当它达到一个数字 -> 做某事?
解决方案
您通常会使用一个函数来执行此操作,该函数返回一个在闭包中捕获计数器的函数。这允许返回的函数在多个调用中保持状态。
例如:
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()
}
您当然可以将回调功能和限制数量硬编码到函数本身中,而不是传入参数。
推荐阅读
- c++ - 检查字符串是否为'?
- react-native - 如何在 React Native 中使用 ScrollToIndex?
- oracle - SSIS OLEDB 命令 - Oracle 连接不会填充参数
- laravel - Jenkins 流水线 - Laravel 单元测试
- youtube-api - 用于 MP4 网址的 YouTube API
- c - 使用函数初始化结构会产生编译器错误
- wpf - 为什么此 DropdownMenu 在 WPF 中不起作用
- html - 将 div 粘贴到另一个 div 的边界,以便它们在调整大小时保持在一起
- c - 在内存块之前而不是之后在 C 中使用 realloc 添加空间
- javascript - caret-equals ^= 运算符有什么作用?