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