2013-07-26 58 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