Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将函数及其参数存储在数组中以供以后调用_Javascript_Jquery - Fatal编程技术网

Javascript 将函数及其参数存储在数组中以供以后调用

Javascript 将函数及其参数存储在数组中以供以后调用,javascript,jquery,Javascript,Jquery,我希望将多个函数及其参数存储在一个数组中,稍后我将循环并执行该数组。在参数周围放置参数时,函数立即执行,其数组值变得未定义。我希望防止这种情况发生,并在以后调用该函数(及其参数)。这是一个我正在努力完成的例子 function getTableAssignments(callbacks) { $.ajax({ method: "POST", datatype: "jsonp", url: base_url + "users/getTable

我希望将多个函数及其参数存储在一个数组中,稍后我将循环并执行该数组。在参数周围放置参数时,函数立即执行,其数组值变得未定义。我希望防止这种情况发生,并在以后调用该函数(及其参数)。这是一个我正在努力完成的例子

function getTableAssignments(callbacks) {
    $.ajax({
        method: "POST",
        datatype: "jsonp",
        url: base_url + "users/getTableAssignments/" + event_id
    }).done(function (data) {
        tables = data;
        if (callbacks.length > 0) {
            $.each(callbacks, function (i, v) {
                v();
            });
        }
    });
}
getTableAssignments([func1(param1, param2), func2, func3(param3)]);

您需要使用函数表达式:

getTableAssignments([
    function() {func1(param1, param2); },
    func2,
    function() {func3(param3); }
]);

存储参数是个问题。以下是如何存储函数引用:

getTableAssignments([func1, func2, func3]);
下面是如何在执行之前将参数绑定到函数。这将返回一个新函数。还有其他方法,但我认为这是最简单的

var boundFunc1 = func1.bind(null, param1, param2);
var boundFunc3 = func3.bind(null, param3);

getTableAssignments([boundFunc2, func2, boundFunc3]);
您还可以将参数存储在对象中作为数组,并使用函数名查找存储的参数,但这似乎很混乱,因此我不会详细说明该方法(并且需要更改调用以编写查找参数的代码)


如果您还没有阅读过bind,我建议您使用这个

我认为箭头函数是一种很好的方法:

函数func1(参数){
console.log(“func1:+param”);
}
函数func2(){
console.log(“func2”);
}
函数func3(参数1,参数2){
log(“func3:+param1+”,“+param2”);
}
函数执行函数(funcs){
对于(变量i=0,len=funcs.length;ifunc1(“爸爸”),
()=>func2(),
()=>func3(“jane”,favorateParam)

]);
表格
是为了好玩吗?是的,我在示例中没有列出的全局变量
.bind()
也可以工作。i、 e.
func1.bind(null,param1,param2)
True,有多种方法可以剥猫皮。当然-只是想给其他观众做个记录
.bind()
还将减少调用堆栈开销(尽管差异可能可以忽略不计)@mhodges其他人将该方法作为答案发布,因此它已经被更明显地注意到。