2017-01-31 110 views
-1

我希望在不創建全局變量的情況下每次調用函數計數時都返回一個數字(1),並且每次我這樣做時,都會將其增加1.在此示例中,它應該返回1 2 3,這確實如此,但它也返回函數返回比預期的要多

function() { 
    x++ 
    return x; 
} 

function counter() { 
 
    var x = 0; 
 
    return function() { 
 
    x++ 
 
    return x; 
 
    } 
 
} 
 

 
var count = counter(); 
 

 
console.log('counter() returns: ' + count); 
 
console.log('invoking the function returns: ' + count()); 
 
console.log('invoking the function returns: ' + count()); 
 
console.log('invoking the function returns: ' + count());

+2

是的,如果你嘗試打印一個函數而不調用它,它通常會顯示函數本身的代碼。你期望第一個console.log行是否打印出來? – JJJ

+1

你想'count'神奇地返回一個新的號碼,每次你提到它***沒有***你必須*調用*()使用'()'...? – deceze

+0

您已經創建了一個全局變量'var count' – brigysl

回答

-2

您可能要重寫toString方法:

function counter() { 
var x = 0; 
    function internal() { 
    x++ 
    return x; 
} 
internal.toString=function(){return internal().toString()}; 
return internal; 
}; 

console.log(counter());//1 
var count=counter(); 
console.log(count);//1 
console.log(count);//2 

http://jsbin.com/lenigadoqe/edit?console

,每當你嘗試輸出功能作爲一個字符串的作品,無論是低谷記錄,或槽數+「」。但是,那並不總是如此,你可能會看看getters/setters。

+0

@downvoters:對不起,誤解了問題,請參閱編輯 –

+1

問題:不能保證返回值將始終用於*字符串上下文中*;這在這個特定的演示中有效,但是'arr.push(count)'還是其他用途呢? – deceze

+0

@deceze:是的,我添加了一個筆記... –

相關問題