JavaScript:获取回调的参数对象

时间:2014-11-14 15:25:36

标签: javascript

小提琴here

为了好奇,我正在寻找一些非常高级的逻辑来帮助函数。我希望能够在_if函数中使用其参数执行函数,而无需提前定义_callback之类的内容?我觉得我在这里错过了一些东西。

var _if = function(predicate,callback){
    if(predicate){
        callback(); //callback(arguments) is not arguments for callback
    }
};
var text = 'some text';
_if(1 > 0,function(){
    console.log('hello world'); //hello world
});
_if(1 > 0,function(text){
    console.log(text); //undefined
});
//define callback for this situation
var _callback = function(x){
    console.log(x);
}
_if(1 > 0,function(){
    _callback(text); //some text
});

2 个答案:

答案 0 :(得分:1)

不确定你想要什么,但也许这会有所帮助:

您也可以这样调用您的函数:

_if(1 > 0,_callback.bind(null,text));  //null is the value of this

_if(1,function(text){
    console.log(text); //this way not undefined
}.bind(null,text));

1)这是因为logic的JavaScript。在其他版本中,如果您使用let text = 'some text'; - ref

,也可以使用您的版本

2)null是函数的这个值,(更多信息here)但我认为如果你需要在函数中使用它,你也可以传递this({ {1}}将在非严格模式下自动替换为全局对象。这就是为什么你可以在函数中使用null。 - ref

答案 1 :(得分:1)

为什么不将回调函数的参数作为_if上的额外参数?

var _if = function (predicate, callback, context) {
    if (predicate) {
        var callbackArgs = [].slice.call(arguments, 3);
        callback.apply(context || null, callbackArgs);
    }
};

// Usage:
_if(true, console.log, console, "text");