Javascript函数的数组

var array_of_functions = [ first_function('a string'), second_function('a string'), third_function('a string'), forth_function('a string') ] array_of_functions[0]; 

这不能按预期工作,因为数组中的每个函数都是在创build数组时执行的。

在数组中执行任何函数的正确方法是:

 array_of_functions[0]; // or, array_of_functions[1] etc. 

谢谢!

 var array_of_functions = [ first_function, second_function, third_function, forth_function ] 

然后当你想在数组中执行给定的函数时:

 array_of_functions[0]('a string'); 

我认为这是原创海报的意图:

 var array_of_functions = [ function() { first_function('a string') }, function() { second_function('a string') }, function() { third_function('a string') }, function() { fourth_function('a string') } ] for (i = 0; i < array_of_functions.length; i++) { array_of_functions[i](); } 

希望这会帮助其他人(像20分钟前我:-)寻找任何有关如何调用数组中的JS函数的提示。

没有你想要完成的更多细节,我们有点猜测。 但是你也许可以通过使用对象表示法来做这样的事情…

 var myFuncs = { firstFunc: function(string) { // do something }, secondFunc: function(string) { // do something }, thirdFunc: function(string) { // do something } } 

并打电话给其中的一个…

 myFuncs.firstFunc('a string') 

要不就:

 var myFuncs = { firstFun: function(string) { // do something }, secondFunc: function(string) { // do something }, thirdFunc: function(string) { // do something } } 

我会通过发布一个更简单的方法来补充这个线程,使用这里最初描述的shift() Javascript方法来执行Array中的各种函数

  var a = function(){ console.log("this is function: a") } var b = function(){ console.log("this is function: b") } var c = function(){ console.log("this is function: c") } var foo = [a,b,c]; while (foo.length){ foo.shift().call(); } 

这与Darin Dimitrov's的基本相同,但它显示了如何使用它dynamic创build和存储函数和参数。 我希望这对你有用:)

 var argsContainer = ['hello', 'you', 'there']; var functionsContainer = []; for (var i = 0; i < argsContainer.length; i++) { var currentArg = argsContainer[i]; functionsContainer.push(function(currentArg){ console.log(currentArg); }); }; for (var i = 0; i < functionsContainer.length; i++) { functionsContainer[i](argsContainer[i]); } 

这是对的

 var array_of_functions = { "all": function(flag) { console.log(1+flag); }, "cic": function(flag) { console.log(13+flag); } }; array_of_functions.all(27); array_of_functions.cic(7); 

如果您正在尝试dynamic传递callback,则可以将单个对象作为parameter passing。 这使您可以更好地控制要使用任何参数执行的function。

 function func_one(arg) { console.log(arg) }; function func_two(arg) { console.log(arg+' make this different') }; var obj = { callbacks: [func_one, func_two], params: ["something", "something else"]; }; function doSomething(obj) { var n = obj.counter for (n; n < (obj.callbacks.length - obj.len); n++) { obj.callbacks[n](obj.params[n]); } }; obj.counter = 0; obj.len = 0; doSomething(obj); //something //something else make this different obj.counter = 1; obj.len = 0; doSomething(obj); //something else make this different 

一个简短的方法来运行他们:

 [first_function, ..., nth_function].forEach (function(f) { f('a string'); }); 

这些函数数组的问题不在“数组forms”,但在这些函数的方式被称为…然后…试试这个…用一个简单的eval()…

 array_of_function = ["fx1()","fx2()","fx3()",.."fxN()"] var zzz=[]; for (var i=0; i<array_of_function.length; i++) { var zzz += eval( array_of_function[i] ); } 

它在这里工作,没有什么上层的工作在家里工作…希望它会有所帮助

使用Function.prototype.bind()

 var array_of_functions = [ first_function.bind(null,'a string'), second_function.bind(null,'a string'), third_function.bind(null,'a string'), forth_function.bind(null,'a string') ] 

也许它可以帮助某人。

 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> window.manager = { curHandler: 0, handlers : [] }; manager.run = function (n) { this.handlers[this.curHandler](n); }; manager.changeHandler = function (n) { if (n >= this.handlers.length || n < 0) { throw new Error('n must be from 0 to ' + (this.handlers.length - 1), n); } this.curHandler = n; }; var a = function (n) { console.log("Handler a. Argument value is " + n); }; var b = function (n) { console.log("Handler b. Argument value is " + n); }; var c = function foo(n) { for (var i=0; i<n; i++) { console.log(i); } }; manager.handlers.push(a); manager.handlers.push(b); manager.handlers.push(c); </script> </head> <body> <input type="button" onclick="window.manager.run(2)" value="Run handler with parameter 2"> <input type="button" onclick="window.manager.run(4)" value="Run handler with parameter 4"> <p> <div> <select name="featured" size="1" id="item1"> <option value="0">First handler</option> <option value="1">Second handler</option> <option value="2">Third handler</option> </select> <input type="button" onclick="manager.changeHandler(document.getElementById('item1').value);" value="Change handler"> </div> </p> </body> </html> 

你有上面的一些最好的答案。 这只是另一个版本。

 var dictFun = { FunOne: function(string) { console.log("first function"); }, FuncTwo: function(string) { console.log("second function"); }, FuncThree: function(string) { console.log("third function"); } 

}

 /* PlanetGreeter */ class PlanetGreeter { hello : { () : void; } [] = []; planet_1 : string = "World"; planet_2 : string = "Mars"; planet_3 : string = "Venus"; planet_4 : string = "Uranus"; planet_5 : string = "Pluto"; constructor() { this.hello.push( () => { this.greet(this.planet_1); } ); this.hello.push( () => { this.greet(this.planet_2); } ); this.hello.push( () => { this.greet(this.planet_3); } ); this.hello.push( () => { this.greet(this.planet_4); } ); this.hello.push( () => { this.greet(this.planet_5); } ); } greet(a: string) : void { alert("Hello " + a); } greetRandomPlanet() : void { this.hello [ Math.floor( 5 * Math.random() ) ] (); } } new PlanetGreeter().greetRandomPlanet();