2013-03-13 57 views
2

我有這樣的事情:完成遞歸函數在JavaScript

function recurse(a){ 
    for(i = a; i < 3; i++){ 
    alert(i); 
    if(i == 0){ 
     recurse(++a); 
    } 
    } 
} 
recurse(0); 

,我期望輸出爲0(調用新功能)1,2(結束稱爲第二功能),然後結束第一次運行1和2的功能。 但是,它只會提醒0,1和2一次,並完成。

回答

2

i是全球

嘗試var i,你可能會得到你期待的行爲。

function recurse(a){ 
    for(var i = a; i < 3; i++){ 
    alert(i); 
    if(i == 0){ 
     recurse(++a); 
    } 
    } 
} 
recurse(0); 

輸出:0, 1, 2, 1, 2

第一1, 2從遞歸的更深層次之中。

按照最初寫的,你會得到0從頂層,1,2從更深的層次,然後就沒有在頂級別的(因爲i < 3不再滿足)。