0

这无疑已经存在,但经过 20 分钟的查找,我在任何地方都找不到它。

我想要的只是一个计数的函数,所以当你第一次调用 uniqueNum() 时,它会返回 0,然后是 1,然后是 2,以此类推。

function uniqueNum(){
    if (typeof x !== 'number') {
        var x = 0;
    } else {
        x++;
    }
    return x
}

希望我不希望函数之外有任何全局变量或变量。

我得到的总是返回 0;

4

3 回答 3

7

闭包可以做到这一点:

var uniqueNum = (function(){
    var num = 0;
    return function(){
        return num++;
    }
}());
uniqueNum(); // 0
uniqueNum(); // 1

正如其他 答案中所建议的那样,“静态”变量也可以工作。

于 2013-07-26T18:24:32.293 回答
3

您可以像这样实现“静态”变量:

function uniqueNum() {
    return uniqueNum.counter = (uniqueNum.counter || 0)+1;
}
于 2013-07-26T18:24:21.360 回答
1

以下将使用函数本身来存储计数器:

function uniqueNum() {
    if (uniqueNum.x == null) {
        uniqueNum.x = 0;
    } else {
        uniqueNum.x++;
    }

    return uniqueNum.x;
}

console.log(uniqueNum()); // 0
console.log(uniqueNum()); // 1
console.log(uniqueNum.x); // 1
于 2013-07-26T18:25:14.833 回答