Javascript函数没有参数和更改返回值

时间:2016-03-15 19:57:58

标签: javascript

我希望在Javascript中编写一个不带参数的函数,但每次都会产生不同的(可预测的)输出。我将使用它进行测试,因此我需要确保我可以预测输出,这意味着使用Date.now()将无效。我正在考虑使用种子RNG(或PRNG),但我想知道是否有其他替代解决方案。

编辑:该函数必须是自包含的,没有变量或函数范围之外的数据。

4 个答案:

答案 0 :(得分:0)

只需在更广泛的范围内修改变量。

var my_counter = 0;

function count() {
  return ++my_counter;
}

console.log(count());
console.log(count());
console.log(count());
console.log(count());
console.log(count());
console.log(count());

答案 1 :(得分:0)

我会选择随机播种的数字解决方案,映射到您希望返回的结果。这样你就可以把它保存在函数中。

OR有一个可以返回的结果数组,只是递增一个索引(带有一个模数,以便索引再次回到起始位置)并返回索引值的结果。有点像...

var index = 0;
var results = [ "x", "y", "z" ];

function test() {
    var value = results[index];
    index = (index++) % results.length;
    return value;
}

因此,该函数将继续循环x,y和z结果。您可以根据需要设置多个可预测的结果。

答案 2 :(得分:0)

由于通过闭包任何函数都可以保持状态(比如你的计数器),你可以生成任意但固定的数据数组(比如,一个数字为Pi的字符串)并返回下一个值:

var getArbitraryValue = (function () {
    var i = 0;

    var arbitraryValue = Math.PI.toString();

    return function () {
        // you may want to reset the index here, once your string runs out
        return arbitraryValue.charAt(i++);
    }
} ());

重复调用getArbitraryValue将返回Pi的数字。

答案 3 :(得分:0)

对于ES2015生成器和迭代器,这是一个有趣的用例,如果你不介意涉及babel:

function* mygenerator() {
  let i = 0;
  while(true){
    yield i++
  }
}
const generator = mygenerator();
const noArgsDifferentResult = () => generator.next().value;

console.log(noArgsDifferentResult()); // 0
console.log(noArgsDifferentResult()); // 1
console.log(noArgsDifferentResult()); // 2

在Babel live parser https://babeljs.io/repl/

中试用