2013-07-26 28 views
0

这无疑已经存在,但在找寻20分钟后我找不到它。唯一号码计数器功能?

我要的是一个计数了,因此第一次调用uniqueNum(函数)则返回0,1,2,然后等

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

我不希望任何全局或外瓦尔的希望。

我总是返回0;

回答

7

闭包可以这样做:

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

“静态” 变量工作过,如otheranswers建议。

+1

你可能会由Douglas Crockford的发现“JavaScript中的好的部分”这类提示一个良好的阅读。 –

+0

@DarrenWhite我记得书中有一个例子,但我不记得Crockford是否使用闭包或构造函数属性。我相信它是后者,但我现在没有这本书来检查。你知道这本书使用哪一本吗? – bfavaretto

3

您可以实现一个 “静态” 变量是这样的:

function uniqueNum() { 
    return uniqueNum.counter = (uniqueNum.counter || 0)+1; 
} 
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 
+1

我相信检查'uniqueNum.x == null'有点误导(虽然它有效),因为第一次'uniqueNum.x'将返回'undefined',而不是'null'。 – bfavaretto

+1

http://contribute.jquery.org/style-guide/js/#type-checks – gustavohenke

+1

我知道它的工作原理,我的意思是你正在检查'null'或'undefined',但是'uniqueNum.x '永远*不会'空'。对不起,挑剔! – bfavaretto