【发布时间】:2016-04-22 15:34:42
【问题描述】:
对于上下文,我正在查看 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 似乎也是 assignments 的语句中发生了什么的一般性问题?
是对的吗?
所以有一个条件运算符。这表示如果? 左侧的内容为真,那么: 左侧的内容为真,否则: 右侧的内容为真。那么,如果num === prev 和min !== max,将rand() 分配给prev,否则将num 分配给prev?
对吗?
【问题讨论】:
-
它会创建一个随机数,但会检查该随机数是否与上次生成的随机数相同。如果确实和上次一样,则再次调用
rand(),否则返回num。 -
你是对的,加上@h2ooooooo ^ 所说的。
-
有人可以描述
prev = num === num条件应该如何工作吗?除了true,我看不出它如何评估其他任何东西 -
@Aaron 就其本身而言,它会。但是
=是最后评估的,所以实际上prev被设置为num === prev && min !== max ? rand() : num的结果。我同意这不是很清楚,也不是可读的代码。我不知道这个模块是用来做什么的。 -
@AndrewTaylor 谢谢,我认为
=具有高优先级,结果它是最低优先级之一。 MDN article on JS operators precedence,有兴趣的朋友。
标签: javascript node.js return