我有以下功能:
function random()
{
var whichProduct = Math.floor(Math.random()*5);
UIALogger.logMessage(whichProduct);
}
random();
每当我调用此函数时,这将在[1,4]中给出一个随机数。
我想知道是否还有其他功能可以在我调用它时按顺序给出一系列数字(如:1,2,3,4,5)。
答案 0 :(得分:4)
使用闭包,这是一个简单的例子:每次调用x()
时,它都会返回sequence(starting at 'startVal')
中的下一个数字,但它不会提前计算每个数字,只有在调用时才会计算。
function seq(startVal) {
var i = startVal - 1;
return function() {
return i++;
}
}
x = seq(1);
alert(x()); // alert(1)
alert(x()); // alert(2)
alert(x()); // alert(3)
编辑:做一个简单的调整以传入一个起始值,序列将从那里开始。
答案 1 :(得分:3)
我认为该语言没有内置任何内容,但您可以像这样定义自己的内容:
var increasingSequence = function(a, b) {
var seq=[], min=Math.min(a,b), max=Math.max(a,b), i;
for (i=min; i<max; i++) {
seq.push(i);
}
return seq;
};
increasingSequence(1, 5); // => [1, 2, 3, 4, 5]
increasingSequence(2, -2); // => [-2, -1, 0, 1, 2]
另请注意,Math.random()
会返回[0,1)
范围内的值(包括零但不包括一个),因此如果您希望随机函数返回[1,5]
,那么您应该像这样实现它:
Math.floor(Math.random() * 5) + 1;