2016-09-16 211 views
0

我正在面临麻烦,理解代码如何将值返回给randFace();我不明白这段代码是如何工作的

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

我无法理解代码的工作。比方说,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)]; 
} 

回答

1

下面是您的代码,为便于理解而重写。做同样的事情。只提取两个变量并给它们命名。

function randFace() { 
    var faces = ["crown", "anchor", "heart", "spade", "club", "diamond"]; 
    var faceIndex = rand(0, 5); 
    return faces[faceIndex]; 
} 
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. []将被执行且el ement将被取回
  4. 取回的值将被返回。
相关问题