解释这个“返回”声明
Explain this `return` statement?
对于上下文,我正在查看 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 === prev
和min !== max
,rand()
分配给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;
这包括赋值和三元运算 ( x ?y : z ),其工作原理与您描述的完全一致。如果 x 为真,则 y,否则 z;
这一切都可以写成下面,这可能会更清楚:
if ( num === prev && min !== max ){
prev = rand();
}
else {
prev = num;
}
return prev;
相关文章:
- 使用在函数外部声明的变量的 Javascript 返回值 + undefined
- 解释这个“返回”声明
- 返回并重新声明函数中的变量
- 返回语句后的函数声明全局变量不会被覆盖
- 如何在打字稿中声明私有类成员的参数和返回类型
- 在javascript的一个语句中声明变量并返回值
- 返回变量而不声明它的函数
- 带有返回声明的单行
- 声明对象并返回它的函数
- 为什么在使用返回的RequireJS函数中声明的Click绑定时未定义
- 我应该如何声明一个函数的返回类型,该函数返回一个没有数据的$q promise
- 承诺中的返回声明
- 为什么第二个函数声明获胜,即使我在它之前返回
- Vim中的语法声明函数可能无法返回
- JavaScript函数声明是否返回对函数的引用
- 如何声明一个javascript变量并将其值赋给一个返回布尔值的php文件
- 当变量在不同的行上声明和赋值时返回最后赋值
- 为什么coffeescript使用«返回& # 187;声明中无处不在
- 当从函数返回一个匿名函数时,返回语句中的函数是函数声明还是函数表达式?
- Javascript中普通函数声明和内部返回块函数声明的区别