解释这个“返回”声明

Explain this `return` statement?

本文关键字:声明 返回 解释      更新时间:2023-09-26

对于上下文,我正在查看 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;
    };
};

我了解大部分正在发生的事情,我只是不太确定最终的返回声明在做什么。

有人可以尽可能清楚地解释它(我对 JavaScript 和编码真的很陌生)。

我想也许这可能是一个关于return陈述中发生了什么的一般问题,这些陈述似乎也是作业?是吗?

所以有一个条件运算符。也就是说,如果?左侧的内容为真,那么:左侧的内容,否则:右侧的内容。那么,如果num === prevmin !== maxrand()分配给prev,否则num分配给prev

是吗?

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

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

所以当你导入这个模块时,你必须调用你得到的东西:

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

然后兰德函数有两个部分:

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

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

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

确保新 num 与前一个不同,并将新值保存在 prev 中,您可以看到如下:

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

我要补充一点,prev变量位于模块闭包中,因此可以从rand范围内访问它,因此每次调用rand都将具有新的prev值。

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

这是可以使用括号的代码的完美示例。同样可以写成如下,这将使它更清晰:

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

这包括赋值和三元运算 ( xyz ),其工作原理与您描述的完全一致。如果 x 为真,则 y,否则 z;

这一切都可以写成下面,这可能会更清楚:

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