2015-12-02 41 views
0

我對控制流中自身的return語句有個疑問。「return」聲明

var rockPaperScissors = function(n) { 
    var rounds = n; 
    var results = []; 

    var weapons = ['rock', 'paper', 'scissors']; 

    var recurse = function(roundsLeft, played) { 
     if(roundsLeft === 0) { 
      results.push(played); 
      return; 
     } 

     for(var i = 0; i<weapons.length; i++) { 
      var current = weapons[i]; 
      recurse(roundsLeft-1, played.concat(current)); 
     } 
    }; 

    recurse(rounds; []); 
    return results; 
} 

我想知道爲什麼return語句不寫爲:

return results.push(played); 

有什麼好處?如果是這樣,那麼爲什麼和什麼時候應該這樣寫?

+0

你有一個小的語法錯誤:它應該是'recurse(rounds,[]);'。它應該是一個逗號而不是分號 – Domysee

回答

1

這是因爲recurse只被用於其副作用(即,爲它做什麼results),而不是它的價值。返回仍然是必要的,以便遞歸最終退出,但除此之外,沒有理由返回recurse中的任何內容。

1

return;return undefined;相同,所以基本沒有返回。
這與函數完成時沒有返回語句的效果相同。

return results.push(played);返回results.push(played);的結果,該結果可能不是未定義的。

如果忽略功能recurse的返回值,則不會有任何區別,您的功能rockPaperScissors就是這種情況。