使用javascript数组的参数添加函数,然后执行它们

时间:2014-03-04 22:34:01

标签: javascript

我有如下功能:

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

由于某种原因,我传递给函数的参数没有被存储。

任何人都知道我可能做错了什么?

4 个答案:

答案 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()确实返回一个函数这一事实,我的答案很糟糕。