2015-03-03 49 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/