2015-03-03 47 views
2

我想知道如何創建一個函數數組,然後隨機化一個函數並調用它。這是我測試過的一個例子。Javascript函數列表

functions = [f1(), f2(), f3(), f4()]; 
 
rand = functions[Math.floor(Math.random() * functions.length)]; 
 

 
$('p').click(function() { 
 
    rand[0](); 
 
}

我已經搜索並嘗試多種解決方案,應該但沒有人工作(包括本:Javascript Array of Functions)。

回答

5

創建使用函數引用數組,然後用隨機密鑰生成單擊處理程序

function log(func) { 
 
    $('#x').html(func) 
 
} 
 

 
function f1() { 
 
    log('f1') 
 
} 
 

 
function f2() { 
 
    log('f2') 
 
} 
 

 
function f3() { 
 
    log('f3') 
 
} 
 

 
function f4() { 
 
    log('f4') 
 
} 
 

 
functions = [f1, f2, f3, f4]; 
 

 
$('p').click(function() { 
 
    var rand = functions[Math.floor(Math.random() * functions.length)]; 
 
    rand(); 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="x"></div> 
 
<p>Click</p>

+0

請問什麼日誌函數和x div的點是?嘗試沒有他們,它很好。謝謝btw。 – ItsNotAbyss 2015-03-03 09:28:45

+0

@ItsNotAbyss只是爲了證明這些函數正在被調用......就像調用f1時div的文本被更改爲f1等 – 2015-03-03 09:30:59

0
  1. 通過添加函數名後()f1())你實際上是執行的功能。您必須將該函數的引用傳遞給數組,以便稍後調用它。所以,

    functions = [f1(), f2(), f3(), f4()]; 
    

    成爲

    functions = [f1, f2, f3, f4]; 
    
  2. 你似乎在計算rand只有一次,因爲它不放在click事件。包括這個,

    rand = functions[Math.floor(Math.random() * functions.length)]; 
    

    在你的事件處理程序中。

  3. rand不是數組。它包含一個函數的引用,可以通過調用它來調用,就像這樣:

    rand(); 
    

你完整的代碼,添加了一些新一起已經在這裏擺弄:http://jsfiddle.net/sq623mrc/