我试图传递一些参数的函数用作回调,我怎么能这样做?

这是我的尝试: 函数tryMe(param1, param2) { Alert (param1 + " and " + param2); } 函数callbackTester(回调,param1, param2) { 回调(param1 param2); } callbackTester(tryMe, "hello", "goodbye");


当前回答

回调函数将由其他函数调用,而不是由您自己的代码调用,并且您希望添加其他参数的场景的新版本。

例如,假设您有许多带有成功回调和错误回调的嵌套调用。我将在这个例子中使用角承诺,但任何带回调的javascript代码都是相同的目的。

someObject.doSomething(param1, function(result1) {
  console.log("Got result from doSomething: " + result1);
  result.doSomethingElse(param2, function(result2) {
    console.log("Got result from doSomethingElse: " + result2);
  }, function(error2) {
    console.log("Got error from doSomethingElse: " + error2);
  });
}, function(error1) {
  console.log("Got error from doSomething: " + error1);
});

现在,您可能希望通过定义一个函数来记录错误,保留错误的起源以用于调试,从而整理代码。这是你如何继续重构你的代码:

someObject.doSomething(param1, function (result1) {
  console.log("Got result from doSomething: " + result1);
  result.doSomethingElse(param2, function (result2) {
    console.log("Got result from doSomethingElse: " + result2);
  }, handleError.bind(null, "doSomethingElse"));
}, handleError.bind(null, "doSomething"));

/*
 * Log errors, capturing the error of a callback and prepending an id
 */
var handleError = function (id, error) {
  var id = id || "";
  console.log("Got error from " + id + ": " + error);
};

调用函数仍然会在回调函数参数之后添加error参数。

其他回答

//Suppose function not taking any parameter means just add the GetAlterConfirmation(function(result) {});
GetAlterConfirmation('test','messageText',function(result) {
                        alert(result);
    }); //Function into document load or any other click event.


function GetAlterConfirmation(titleText, messageText, _callback){
         bootbox.confirm({
                    title: titleText,
                    message: messageText,
                    buttons: {
                        cancel: {
                            label: '<i class="fa fa-times"></i> Cancel'
                        },
                        confirm: {
                            label: '<i class="fa fa-check"></i> Confirm'
                        }
                    },
                    callback: function (result) {
                        return _callback(result); 
                    }
                });

你的问题不清楚。如果你在问如何以更简单的方式做到这一点,你应该看看ECMAScript第5版方法.bind(),它是Function.prototype的成员。使用它,你可以做这样的事情:

function tryMe (param1, param2) {
    alert (param1 + " and " + param2);
}

function callbackTester (callback) {
    callback();
}

callbackTester(tryMe.bind(null, "hello", "goodbye"));

你也可以使用下面的代码,它会在当前浏览器中不可用时添加方法:

// From Prototype.js
if (!Function.prototype.bind) { // check if native implementation available
  Function.prototype.bind = function(){ 
    var fn = this, args = Array.prototype.slice.call(arguments),
        object = args.shift(); 
    return function(){ 
      return fn.apply(object, 
        args.concat(Array.prototype.slice.call(arguments))); 
    }; 
  };
}

例子

bind() - PrototypeJS文档

在这个简单的例子中使用curry函数。

const BTN = document.querySelector('button') const RES = document.querySelector('p') const changeText = newText => () => { RES.textContent = newText } BTN。addEventListener(“点击”,changeText(点击!)) <按钮> ClickMe > < /按钮 < p >不点击< p >

最近遇到了这个问题,要得到它(特别是如果父函数有多个参数做不同的事情,与回调无关,是将回调与它的参数放在一个箭头函数中作为参数传递。

function tryMe(param1, param2) {
  alert(param1 + " and " + param2);
}

function callbackTester(callback, someArg, AnotherArg) {
  callback();
  
}

callbackTester(()=> tryMe("hello", "goodbye"), "someArg", "AnotherArg");

...或者简单地说,如果你没有多个参数做其他的事情。

function tryMe(param1, param2) {
  alert(param1 + " and " + param2);
}

function callbackTester(callback) {
  callback();
}

callbackTester(()=> tryMe("hello", "goodbye"));

只需使用bind()函数,该函数主要用于设置this值。但是,我们也可以使用它来传递参数而不调用函数,因为bind()返回一个带有提供的参数序列的新函数。

例子:

函数foo(param1, param2, param3) { console.log(param1, param2, param3); } setTimeout (foo。bind(null, 'foo', 'bar', 'ba '), 1000);

在上面的代码片段中,setTimeout函数有两个参数,一个是回调函数,另一个是函数被调用的最小时间(以ms为单位),因此在传递回调函数时,我们将使用bind并指定参数

注意:bind的第一个参数是我们想要为此设置的值,因为我们对它不感兴趣,传递的是null,所以bind中的后续参数将是回调的参数。