Javascript 从数组列表中调用函数

Javascript 从数组列表中调用函数,javascript,function,arraylist,call,Javascript,Function,Arraylist,Call,有谁能帮我从数组中调用带参数的函数吗。我写了一个下面的示例,但最后我得到了错误“UncaughtTypeError:object[object Array]的属性“0”不是函数” 功能添加(a、b){ 日志(“添加:”+(a+b)) } 职能分包(a、b){ log(“减法:”+(a-b)) } 多功能(a、b){ log(“乘法:”+(a*b)) } 职能部门(a、b){ 控制台日志(“分区:”+(a/b)) } var fList=[加(1,1)、分(1,1)、多(1,1)、分(1,1)];

有谁能帮我从数组中调用带参数的函数吗。我写了一个下面的示例,但最后我得到了错误“UncaughtTypeError:object[object Array]的属性“0”不是函数”

功能添加(a、b){
日志(“添加:”+(a+b))
}
职能分包(a、b){
log(“减法:”+(a-b))
}
多功能(a、b){
log(“乘法:”+(a*b))
}
职能部门(a、b){
控制台日志(“分区:”+(a/b))
}
var fList=[加(1,1)、分(1,1)、多(1,1)、分(1,1)];
对于(变量i=0;i

jsiddle:

括号实际上调用函数,因此当您将每个括号添加到列表中时,它会立即调用它。您实际上是在创建函数返回值的数组。

您可能希望作为对象而不是数组执行此操作:

var fList = {
add: function(a, b){
    console.log("Addition: " + (a + b))
},

sub: function(a, b){
    console.log("Subtraction: " + (a - b))
},

multi: function(a, b){
    console.log("Multiplication: " + (a * b))
},

div: function(a, b){
    console.log("Division: " + (a / b))
},
}

错误消息说明了一切。fList[0]不是函数-您已将其定义为add(1,1),该函数可能未定义,因为您没有从add()返回任何内容。你想要的东西大致如下:

var add = function(a, b) {
  return a + b;
};

// (...)

var fList = [add, ...];

// (...)
然后在循环中,你会:

fList[i](1, 1)

您可能会考虑重新编写代码,使其更像

var fList = [
    { method: add, args: [1,1] },
    { method: sub, args: [1,1] },
    { method: muti, args: [1,1] },
    { method: div, args: [1,1]
}];

for (var i = 0; i < fList.length; i++){
window.apply(null, fList[i].method, fList[i].args);
}
var fList=[
{method:add,args:[1,1]},
{方法:sub,args:[1,1]},
{方法:muti,args:[1,1]},
{方法:div,args:[1,1]
}];
对于(变量i=0;i
您正在创建一个返回值数组,而不是函数数组。使用:

var fList = [
    function() { add(1,1); },
    function() { sub(1,1); },
    function() { multi(1,1); },
    function() { div(1,1); }
];
您可以通过如下方式动态添加到
fList

flist.push(function() { add(2, 3); });

尝试…window.call(fList[i])@杰森,那有什么帮助
fList
是一个数字数组,而不是函数数组。他想要一个用特定参数调用函数的数组。可能是真的-我更喜欢这种方式:)谢谢Barmar,但再一次怀疑。如何将函数列表动态添加到fList?我有一个json,其中一个属性是add(1,1)。在处理json时,我需要将此属性添加到fList,最后我将处理此列表以调用该函数。如何在json中获得
add(1,1)
?JSON只能表示数组、对象、数字和字符串。对不起,它不是JSON。它是一个物体。在处理我正在动态分配的参数并添加到fList以最终处理时,您需要显示您正在处理的代码,很难描绘它。但我怀疑你只需要使用闭包。我在答案中添加了一些东西,也许这会有所帮助。
flist.push(function() { add(2, 3); });