JavaScript - 将数据传递给匿名函数

时间:2014-11-04 06:42:41

标签: javascript asynchronous parameters callback anonymous-function

我是一个典型的用例(可能对我的用例过于具体)。

我是这样的一块:

var x=0,y=10;

var data = {"callback" : function(x,y) {console.log(x,y)}}

代码流中的某些地方我异步调用匿名函数

call(data.callback);

我的问题是在第二段代码中我没有在调用函数时传递x,y的数据。那么,有没有什么方法可以在声明函数本身时附加数据(x,y变量数据)?

编辑1:

@Kursad Gulseven,因为,为了简单起见,我表现得那样。

但是,在实际情况下,"数据","回调"是动态名称。所以,我不能简单地使用data.callback。

虽然我这样做,但我不能拥有变量(有数据),我试图调用我的匿名函数。因为调用匿名函数又来自另一个异步函数,这就是这里的问题。

希望它清楚并且有道理。

2 个答案:

答案 0 :(得分:1)

在数据对象可用时注入x和y。



data = {
  x: null,
  y: null,
  "callback": function(x, y) {
    x = x || this.x;
    y = y || this.y;
    console.log(x, y);
  }
}

data.x = 0
data.y = 10;

// I'm assuming here you have a way to know how the "data" object is called
// and how to access it. (the obejct it's attached to)
// For simplicity, I used a global

var dataName = 'data',
  callbackName = 'callback';

//using a wrapper function without parameters, like in your example
// call(data.callback);


//calling without parameters
window['data']['callback']();

// calling with parameters
window[dataName][callbackName](15, 25);




注意: 如果您通过某种异步调用获取x和y,则可能需要检查promise pattern

答案 1 :(得分:1)

我不确定为什么你不能设置data.xdata.y然后读取这些值,如另一个答案所提到的那样。如果这不令人满意,那么当你获得xy时,也许你可以构建一个闭包(具有xy预设的函数),如下所示:

function setCallback(x,y){
  return (function(){console.log(x,y);});
}
data.callback=setCallback(0,10);

data.callback与您的功能相同,只有xy预设为您提供的示例值。

执行data.callback();然后在控制台中生成0 10