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其他人将该方法作为答案发布,因此它已经被更明显地注意到。