2014-12-27 91 views
0

我對函數和數組有疑問。當我在索引1中傳遞3的值時,我們得到的結果是0,在索引3處傳遞4的值是相同的。但是,我在執行時獲得的答案是22.我不明白爲什麼?任何人都可以解釋我錯過了什麼。執行時得到錯誤結果

var puzzlers = [ 
function (a) { return 8*a - 10; }, 
function (a) { return (a-3) * (a-3) * (a-3); }, 
function (a) { return a * a + 4; }, 
function (a) { return a % 5; } 
]; 

alert(puzzlers[puzzlers[1](3)](puzzlers[3](9))); 
+0

nash_ag的回答是正確的。如果你不這麼認爲,也許你正在考慮「猜謎遊戲者」[1]'是你陣列中的第一個,事實並非如此。數組的索引範圍是[0-3]。 – ulix

回答

0

代碼(和答案)正在做正確的事情。你需要從最內層開始分解步驟中發生的事情。所以,你的問題:

alert(puzzlers[puzzlers[1](3)](puzzlers[3](9))); 

看:

// puzzlers[3](9) is 4 
alert(puzzlers[puzzlers[1](3)](4)); 

然後看:

// puzzlers[1](3) is 0 
alert(puzzlers[0](4)); 

然後將溶液:

alert(4*8 - 10); 

哪個是正確的。

1

你得到正確的結果:

alert(puzzlers[puzzlers[1](3)](puzzlers[3](9))); 

puzzlers[3](9)評估爲4puzzlers[1](3)評估爲0。所以最終的結果將是puzzlers[0](4)8*4 - 1022

0

你能告訴我們爲什麼你得到錯誤的結果嗎?你期望的答案是什麼? 你問的問題顯示22(PM 77-1說的是什麼)。

+0

我說錯了結果,因爲當我手動評估我犯了一個錯誤,澄清了。 – user3484925