我有一个关于控制流中返回语句本身的问题。
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 results.push(played);有什么好处吗?如果是这样,为什么以及什么时候应该这样写呢?
发布于 2015-12-03 03:24:50
这是因为recurse只是为了它的副作用(即,它对results所做的事情),而不是它的价值。返回仍然是必要的,这样递归才能走出谷底,但除此之外,没有理由从recurse返回任何东西。
发布于 2015-12-03 03:26:21
return;与return undefined;相同,所以基本上不返回任何内容。
它的效果与函数在没有返回语句的情况下结束时的效果相同。
return results.push(played);返回results.push(played);的结果,可能不是未定义的。
如果忽略函数recurse的返回值,就没有区别,就像函数rockPaperScissors中的情况一样。
https://stackoverflow.com/questions/34051203
复制相似问题