我无法理解这段代码是如何工作的

时间:2016-09-16 10:13:03

标签: javascript arrays return helper-functions

我很难理解代码究竟是如何将值返回到randFace();

我已经理解了rand(0,5)的使用,因此它可以随机生成一个恰好是[“crown”,“锚”,...]数组长度的数字。

我无法理解代码的工作原理。比方说,rand(0,5)将3作为数字返回,然后我确实认为randFace()会返回“spade”,但是怎么回事?

function rand(m, n) {
return m + Math.floor((n - m + 1)*Math.random());
}

// randomly returns a string representing one of the six
// Crown and Anchor faces

function randFace() {
return ["crown", "anchor", "heart", "spade", "club", "diamond"]
[rand(0, 5)];
}

2 个答案:

答案 0 :(得分:1)

这是您的代码,为了更容易理解而重写。做同样的事情。只提取了两个变量并给它们命名。

function randFace() {
  var faces = ["crown", "anchor", "heart", "spade", "club", "diamond"];
  var faceIndex = rand(0, 5);
  return faces[faceIndex];
}

答案 1 :(得分:1)

执行array[index]时,您将获得该数组中位置index的元素。如果没有元素,则默认返回undefined

您的代码是这样的缩写版本:

function rand(m, n) {
  return m + Math.floor((n - m + 1) * Math.random());
}

function randFace(m,n) {
  var array = ["crown", "anchor", "heart", "spade", "club", "diamond"];
  var index = rand(m,n);
  return array[index]
}

console.log(randFace(0,5))
console.log(randFace(10,15))

因此,当您执行functionName(args)时,将首先调用函数,并将输出传递给父作用域。因此,当您执行[...][rand(0,5)]时,首先会执行rand(0,5)

输出将用作索引值以获取数组中的元素。

正如@ sergio tulentsev正确评论,在以下行

return ["crown", "anchor", "heart", "spade", "club", "diamond"][rand(0,5)]

执行顺序为

  1. 初始化数组:["crown", "anchor", "heart", "spade", "club", "diamond"]
  2. 然后rand(0,5)和输出将传递给第二个[]
  3. 将执行第二个[]并将获取元素
  4. 将返回获取的值。