我有一个函数,当被调用时将减少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()
}





当然,您可以对回调功能进行硬编码,并在函数本身中限制数量,而不必传入参数。

09-27 03:52