从 d3.random 返回数字
Returning numbers from d3.random
我想问一下variables/functions的return类型。我有一些这样的示例代码:
var randomX = d3.randomNormal(mean, 80),
randomY = d3.randomNormal(mean, 80),
points = d3.range(1000).map(function() {return [randomX(), randomY()]; });
randomX
和randomY
声明为变量,为什么在return
行是randomX()
和randomY()
加括号?
我是 Javascript 的新手,请帮帮我。提前致谢!
我确定这个问题已经在其他地方得到了解答,但请看这个例子:
function fn1(inputNumber) {
return function () {
return Math.round(Math.random() * inputNumber)
}
}
var bigRand = fn1(10000);
console.log(bigRand());
console.log(bigRand());
这有点像 d3.randomNormal 正在做的事情。您正在通过闭包创建一个新函数,主要是在这种情况下,因此您不必一遍又一遍地重复相同的输入。这实际上与执行以下操作相同:
function fn2(inputNumber) {
return Math.round(Math.random() * inputNumber)
}
console.log(fn2(10000));
console.log(fn2(10000));
见How do JavaScript closures work?
只是将特定的 D3 信息添加到评论和接受的答案(很好地涵盖了这个问题):d3.randomNormal()
returns a function.
API清楚:
Returns a function for generating random numbers with a normal (Gaussian) distribution. (emphasis mine)
如果你检查源代码,你也可以看到这个:
export default (function sourceRandomNormal(source) {
function randomNormal(mu, sigma) {
//bunch of code here...
};
return randomNormal;//returns the function here!
});
所以,如果你想得到实际的数字,你必须调用它(带括号):
d3.randomNormal([mu][, sigma])()
//parentheses here------------^
让我们证明一下。
首先,不带括号:
var random = d3.randomNormal(10, 1);
console.log(random);
<script src="https://d3js.org/d3.v4.js"></script>
现在加上括号:
var random = d3.randomNormal(10, 1)();
console.log(random);
<script src="https://d3js.org/d3.v4.js"></script>
我想问一下variables/functions的return类型。我有一些这样的示例代码:
var randomX = d3.randomNormal(mean, 80),
randomY = d3.randomNormal(mean, 80),
points = d3.range(1000).map(function() {return [randomX(), randomY()]; });
randomX
和randomY
声明为变量,为什么在return
行是randomX()
和randomY()
加括号?
我是 Javascript 的新手,请帮帮我。提前致谢!
我确定这个问题已经在其他地方得到了解答,但请看这个例子:
function fn1(inputNumber) {
return function () {
return Math.round(Math.random() * inputNumber)
}
}
var bigRand = fn1(10000);
console.log(bigRand());
console.log(bigRand());
这有点像 d3.randomNormal 正在做的事情。您正在通过闭包创建一个新函数,主要是在这种情况下,因此您不必一遍又一遍地重复相同的输入。这实际上与执行以下操作相同:
function fn2(inputNumber) {
return Math.round(Math.random() * inputNumber)
}
console.log(fn2(10000));
console.log(fn2(10000));
见How do JavaScript closures work?
只是将特定的 D3 信息添加到评论和接受的答案(很好地涵盖了这个问题):d3.randomNormal()
returns a function.
API清楚:
Returns a function for generating random numbers with a normal (Gaussian) distribution. (emphasis mine)
如果你检查源代码,你也可以看到这个:
export default (function sourceRandomNormal(source) {
function randomNormal(mu, sigma) {
//bunch of code here...
};
return randomNormal;//returns the function here!
});
所以,如果你想得到实际的数字,你必须调用它(带括号):
d3.randomNormal([mu][, sigma])()
//parentheses here------------^
让我们证明一下。
首先,不带括号:
var random = d3.randomNormal(10, 1);
console.log(random);
<script src="https://d3js.org/d3.v4.js"></script>
现在加上括号:
var random = d3.randomNormal(10, 1)();
console.log(random);
<script src="https://d3js.org/d3.v4.js"></script>