2017-02-06 34 views
0
function counter() { 
    var n = 0; 

    return function counter() { 
     n += 1; 

     return n; 
    } 
} 



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()); 

該函數返回一個數字,每次調用該函數時,函數都會返回一個比前一個數字高一個數字的數字。多次調用函數,但第一次打印奇怪的東西

這段代碼的問題是這樣的:

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

這將打印的打印的 function counter(){ n+= 1; return n; } 而不是0計數器的內部函數的實際代碼反正是有解決它?其他控制檯語句打印正確,打印輸出1 2 3

+0

打印代碼是因爲在調用外部函數時返回內部函數。要解決它,只需調用'count()'函數即可。 – Tushar

+1

在那個地方打印'count',在其他地方打印'count()'。兩者不一樣。您沒有可以打印'0'的代碼。 – Amadan

+0

這不是奇怪的,而是*函數*'count'的字符串表示形式。你還期望什麼? – Bergi

回答

0

在第一種情況下,您獲得的輸出是函數定義,因爲您正在通過分配var count = counter()將函數返回到varibale。你需要調用數像count()因此,如果您想打印0您需要初始化var n = -1,否則你的結果將1,因爲它的值遞增開始,然後返回

執行它的函數定義

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

function counter() { 
 
    var n = -1; 
 

 
    return function counter() { 
 
     n += 1; 
 

 
     return n; 
 
    } 
 
} 
 

 

 

 
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());

0

有沒有辦法,你的代碼可以打印0,因爲該值在返回之前遞增。如果您希望返回的第一個號碼是0,請從-1開始。

function counter() { 
 
    var n = -1; 
 
    return function() { 
 
     n += 1; 
 
     return n; 
 
    }; 
 
} 
 

 
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());

console.log(count)打印功能本身到控制檯。這是預期的。

相關問題