将函数及其参数存储在数组中以便稍后调用

时间:2017-03-15 20:05:25

标签: javascript jquery

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

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)]);

3 个答案:

答案 0 :(得分:2)

存储参数是个问题。以下是存储函数引用的方法:

getTableAssignments([func1, func2, func3]);

以下是在执行之前参数绑定到函数的方法。这将返回一个新函数。还有其他方法可以做到,但我认为这将是最简单的。

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

getTableAssignments([boundFunc2, func2, boundFunc3]);

您还可以将参数作为数组存储在对象中,并使用函数名称查找这些存储的参数,但这看起来很混乱,所以我不会对该方法进行解释(并且需要您更改调用代码查找参数)。

如果您还没有读过绑定,我建议您video

答案 1 :(得分:1)

您需要使用函数表达式:

Node

答案 2 :(得分:0)

我认为箭头功能是一种灵活的方式:

function func1 (param) {
	console.log("func1 : " + param);
}
function func2 () {
	console.log("func2");
}
function func3 (param1, param2) {
	console.log("func3 : " + param1 + ", " + param2);
}

function executeFunctions(funcs) {
	for (var i = 0, len = funcs.length; i < len; i++) {
		funcs[i]();
	}
}

favorateParam = "bob";
executeFunctions([
	()=>func1("dad"),
	()=>func2(),
	()=>func3("jane",favorateParam)
]);