向javascript回调中添加一个变量

Add a variable to a javascript callback

本文关键字:一个 变量 javascript 回调 添加      更新时间:2023-09-26

我正在使用一个必须定义回调函数的库,该库将在特定事件时执行该函数:

// initialize the callback for the library.
// `lib` is the main variable for the library and is defined globally
function initializations() {
    var extra_var = 'pass me into the callback';
    var libprops = {
        libcallback: function(settings) { do stuff }
    };
    lib.reconfigure(libprops);
}

库然后像这样运行回调(我无法控制这一点):

var settings = 'xyz';
libprops.libcallback(settings);

所以很明显,我定义的回调的一个变量输入将是settings变量。然而,我也想传入一个我自己的变量:

function mycallback(settings, extra_var) {
    // do stuff involving settings
    // do stuff involving extra_var
}

我如何在initializations()中定义libprops.libcallback,以便extra_var被传递进去,但在其他地方定义了mycallback函数?我像这样:

function mycallback(settings, extra_var) {
    // do stuff involving settings
    // do stuff involving extra_var
}

这可能吗?我想在initializations()之外定义mycallback()的原因是mycallback()非常大,在initializations()内定义它会很混乱。

似乎闭包可以解决这个问题,但是我不太确定如何构造它。下面是一个初步的尝试:

function initializations() {
    var extra_var = 'pass me into the callback';
    var libprops = {
        libcallback: (function(settings) {
            mycallback(settings, extra_var)
        })(extra_var)
    };
    lib.reconfigure(libprops);
}

你已经有一个闭包,因此你不需要在任何地方传递extra_var,它已经可以用于你的匿名回调函数,作为extra_var

function initializations() {
    var extra_var = 'pass me into the callback';
    var libprops = {
        libcallback: function(settings) {
            // do stuff 
            // you can do stuff with extra_var here too
        }
    };
    lib.reconfigure(libprops);
}

根据评论中的额外信息,只需在匿名回调中调用您的myfunction,将extra_vars作为第二个参数传递(或者如果您想要,没关系,这是您的函数)

function initializations() {
    var extra_var = 'pass me into the callback';
    var libprops = {
        libcallback: function(settings) {
            mycallback(settings, extra_var);
        }
    };
    lib.reconfigure(libprops);
}

可能有另一种使用.bind的方式-但是,在这样一个简单的场景中不需要这样的体操

是的,闭包可以,但是你不需要"现在"调用这个函数。您可以创建一个引用本地extra_var的函数并传递它:

function initializations() {
    var extra_var = 'pass me into the callback';
    var libprops = {
        libcallback: function(settings) {
            // you can access both settings passed in as a parameter
            // and extra_var, referenced locally.
            var settingsLocal = settings,
              another = extra_var;
        }
    };
    lib.reconfigure(libprops);
}

如果extra_var有一个固定的值,就完成了。在其他地方,你需要详细说明你的请求。