2016-09-16 107 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. 取回的值將被返回。
相關問題