我有如下功能:
function callme(x,y) {
return function() {
console.log("value of x = " + x);
console.log("value of y = " + y);
}
}
我想将上述函数添加到数组中然后执行它们
var steps = [];
steps.push(callme(1,2));
steps.push(callme(2,3));
steps[0]; // should execute first function
steps[1]; // should execute second function
由于某种原因,我传递给函数的参数没有被存储。
任何人都知道我可能做错了什么?
答案 0 :(得分:1)
你实际上并没有调用方法。调用方法涉及使用括号语法,如下所示:
steps[0](); // should execute first function
steps[1](); // should execute second function
修改强> 的
Jared善待JSFiddle。
第二次修改
在您的评论中,您已要求添加回调功能。虽然这可能是一个单独的问题,但我现在要抛出一个骨头:
function callme(x, y, callback) {
return function() {
console.log("value of x = " + x);
console.log("value of y = " + y);
callback();
}
}
我假设您要按顺序(从您的数组)以编程方式调用函数,因此您可能需要这样的内容:
var steps = [];
steps.push(callme(1, 2, next));
steps.push(callme(2, 3, next));
var i = -1;
function next(){
i++
if(i < steps.length){
steps[i]();
}
}
next();
应该注意的是,这种方法的顺序调用可能是一个滑坡。主要是因为在最后一次回调完成执行之前调用了回调方法,导致可能的堆栈溢出错误。
你最好去研究设计模式:中间件和承诺是一个很好的起点。
答案 1 :(得分:0)
你应该这样打电话
steps[0]();
steps[1]();
答案 2 :(得分:0)
为了执行每个功能,您需要调用它。
因此,此行steps[0]
应该看起来像steps[0]()
答案 3 :(得分:-1)
<强> EDITED 即可。由于我在某种程度上忽略了callme()确实返回一个函数这一事实,我的答案很糟糕。