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

JavaScript - pass data to anonymous function

本文关键字:函数 数据 JavaScript-      更新时间:2023-09-26

我有一个典型的用例(可能对我的用例太具体了)。

我有一个类似的片段:

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

在代码流中,im异步调用上面的匿名函数

call(data.callback);

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

编辑1:

@Kursad Gulseven,因为,简单地说,我就是这样表现的。

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

尽管我这样做了,但我不能有变量(带数据),在那里我试图调用我的匿名函数。因为调用匿名函数再次来自另一个异步函数,这就是这里的问题所在。

希望它清晰明了,有一定的道理。

在数据对象中注入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模式

我不知道为什么不能设置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