带参数的Javascript回调函数

rof*_*fls 14 javascript callback

这个问题看似重复,因为标题几乎被复制了.但是,我的问题似乎更简单,我找不到答案.

我有一个Javascript函数执行另一个回调函数,它的工作方式如下:

<script type='text/javascript'>
firstfunction(callbackfunction);
</script>
Run Code Online (Sandbox Code Playgroud)

其中回调函数定义为:

callbackfunction(response) {
    if (response=='loggedin'){
    // ... do stuff
}}
Run Code Online (Sandbox Code Playgroud)

但我希望它是这样的:

callbackfunction(response, param) {
    if (response=='loggedin'){
    // ... do stuff with param
}}
Run Code Online (Sandbox Code Playgroud)

我的问题是,传递这样的参数是否有效:

<script type='text/javascript'>
firstfunction(callbackfunction(param));
</script>
Run Code Online (Sandbox Code Playgroud)

或者我做错了吗?

jfr*_*d00 26

直接回答您的问题,这不起作用:

 firstfunction(callbackfunction(param));
Run Code Online (Sandbox Code Playgroud)

这将callbackfunction立即执行并传递返回值,从执行它作为参数firstfunction,不太可能你想要的.


从您的问题中不清楚是否应该更改firstfunction()callbackfunction()在调用回调时传递两个参数,或者是否应该创建一个使用参数调用回调函数的匿名函数.

这两个选项看起来像这样:

function firstfunction(callback) {
    // code here
    callback(arg1, arg2);
}

firstfunction(callbackfunction);
Run Code Online (Sandbox Code Playgroud)

要么

function firstfunction(callback) {
    // code here
    callback();
}

firstfunction(function() {
    callbackfunction(xxx, yyy);
});
Run Code Online (Sandbox Code Playgroud)


elc*_*nrs 7

使用匿名函数:

function foo( callback ) {
  callback();
}

function baz( param ) {
  console.log( param );
}

foo( function(){ baz('param') });
Run Code Online (Sandbox Code Playgroud)