Javascript函数数组

Nic*_*ick 116 javascript arrays function

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

array_of_functions[0];
Run Code Online (Sandbox Code Playgroud)

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

通过执行以下操作来执行数组中任何函数的正确方法是什么:

array_of_functions[0];  // or, array_of_functions[1] etc.
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dar*_*rov 221

var array_of_functions = [
    first_function,
    second_function,
    third_function,
    forth_function
]
Run Code Online (Sandbox Code Playgroud)

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

array_of_functions[0]('a string');
Run Code Online (Sandbox Code Playgroud)

  • 提示:记得在`array_of_functions [0]`之后加上`()`,即使它是空的.我花了20分钟才发现'为什么那不起作用'. (12认同)

小智 101

我认为这是原始海报要完成的目标:

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]();
}
Run Code Online (Sandbox Code Playgroud)

希望这将有助于其他人(比如我20分钟前:-)寻找有关如何在数组中调用JS函数的任何提示.

  • 这正是我需要的,因为它允许我更改参数调用,假设我的函数并不都采用相同的参数:P (3认同)

Jef*_*eff 23

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

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

  secondFunc: function(string) {
    // do something
  },

  thirdFunc: function(string) {
    // do something
  }
}
Run Code Online (Sandbox Code Playgroud)

并打电话给其中一个......

myFuncs.firstFunc('a string')
Run Code Online (Sandbox Code Playgroud)

  • 我认为这对开发人员更友好,因为我们不需要记住函数索引。而且,如果我们想在特定索引处推送任何函数,那么它会导致它旁边的所有函数的索引发生变化。所以最好使用这个 (2认同)

Rob*_*bin 15

要不就:

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

  secondFunc: function(string) {
    // do something
  },

  thirdFunc: function(string) {
    // do something
  }
}
Run Code Online (Sandbox Code Playgroud)


Gus*_*Gus 11

我将通过使用此处最初描述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();
  }
Run Code Online (Sandbox Code Playgroud)


Men*_*vić 6

它基本上是相同的,Darin Dimitrov's但它显示了如何使用它来动态创建和存储函数和参数.我希望它对你有用:)

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]);
}
Run Code Online (Sandbox Code Playgroud)


mlh*_*zan 5

在上面我们看到了一些迭代。让我们使用 forEach 做同样的事情:

var funcs = [function () {
        console.log(1)
  },
  function () {
        console.log(2)
  }
];

funcs.forEach(function (func) {
  func(); // outputs  1, then 2
});
//for (i = 0; i < funcs.length; i++) funcs[i]();
Run Code Online (Sandbox Code Playgroud)