我在控制流程中有一个关于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 :(得分:1)
那是因为recurse
仅用于其副作用(即它对results
的作用),而不是它的价值。返回仍然是必要的,以便递归达到最低点,但除此之外,没有理由从recurse
返回任何内容。
答案 1 :(得分:1)
return;
与return undefined;
相同,所以基本上不返回任何内容
这与在没有return语句的情况下完成函数的效果相同。
return results.push(played);
会返回results.push(played);
的结果,该结果可能未定义。
如果忽略函数recurse
的返回值,则没有区别,函数rockPaperScissors
就是这种情况。