等待function在JavaScript中完成
下面的代码是怎么产生的,每次都会产生一个不同的输出(不是因为这个随机函数),但是它给了一些未定义的值,有时甚至是其他值。 问题是什么?
function getRandom(ubound) { return Math.floor((Math.random()*10) % ubound); } function getInterval() { var interval = [getRandom(10), getRandom(10)]; if(interval[1] >= interval[0]) return interval; else getInterval(); } function generateIntervals() { for(var i = 0; i < n; i++) intervals[i] = getInterval(); } function printIntervals() { for(var i = 0; i < n; i++) console.log("Node " + (i + 1) + ": " + intervals[i]); } generateIntervals(); printIntervals();
我得到如下输出:
Node 1: 0,9 Node 2: 0,3 Node 3: undefined Node 4: 2,2
要么
Node 1: 3,3 Node 2: 3,3 Node 3: 1,8 Node 4: undefined
在recursion函数中缺lessreturn
值:
if(interval[1] >= interval[0]) return interval; else return getInterval(); // ^^^^^^
虽然我个人只是交换两个值,而不是使用recursion。 =]
if(interval[1] >= interval[0]) return interval; else return [interval[1], interval[0]];
或者更简单/使用Array.reverse()
语义:
if(interval[1] < interval[0]) interval.reverse(); return interval;
小提琴