对于上下文,我正在查看npm包unique-random。这只是八行代码,因此,它是完整的:

'use strict';
module.exports = function (min, max) {
    var prev;
    return function rand() {
        var num = Math.floor(Math.random() * (max - min + 1) + min);
        return prev = num === prev && min !== max ? rand() : num;
    };
};


我了解大多数情况,但我不确定最终的return语句在做什么。

有人可以尽可能明确地解释它(我真的对JavaScript和编码是陌生的)。

我想这可能是关于return语句(也似乎是赋值)中正在发生什么的一个普遍问题?
那正确吗?

因此,有一个条件运算符。这就是说,如果?左侧的内容为真,则:左侧的内容为真,否则:右侧的内容为真。那么,如果num === prevmin !== max,将rand()分配给prev,否则将num分配给prev

那正确吗?

最佳答案

基本上,此模块返回一个函数:

module.exports = function () {
    return function rand() {
      // stuff
    };
};


因此,当您导入此模块时,必须调用得到的内容:

var rand = import('./rand');
rand(); // stuff


然后,rand函数包含两个部分:

var num = Math.floor(Math.random() * (max - min + 1) + min);


计算介于最小值和最大值之间的随机值。

return prev = num === prev && min !== max ? rand() : num;


确保新编号与上一个不同,并将新值保存在prev中,您可以看到如下所示:

if ( num === prev && min !== max ){
   prev = rand();
} else {
   prev = num;
}
return prev;


我将添加prev变量在模块闭包中,因此可以在rand范围内访问它,因此对rand的每次调用都将具有新的prev值。

(严格说来不是相同的代码,但是它应该做同样的事情)

关于javascript - 解释这个“return”语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36797962/

10-11 23:36