19

タイトルがほぼ複製されているため、この質問は重複しているように見えます。しかし、私の問題はもっと単純なようで、答えが見つかりません。

別のコールバック関数を実行する Javascript 関数があります。次のように機能します。

<script type='text/javascript'>
firstfunction(callbackfunction);
</script>

コールバック関数は次のように定義されます。

callbackfunction(response) {
    if (response=='loggedin'){
    // ... do stuff
}}

しかし、私はそれを次のようにしたい:

callbackfunction(response, param) {
    if (response=='loggedin'){
    // ... do stuff with param
}}

私の質問は、次のようにパラメーターを渡すことは機能しますか?

<script type='text/javascript'>
firstfunction(callbackfunction(param));
</script>

または私はそれを間違っていますか?

4

5 に答える 5

30

あなたの質問への直接の答えとして、これはうまくいきません:

 firstfunction(callbackfunction(param));

それはcallbackfunctionすぐに実行され、実行からの戻り値を引数として渡しますが、firstfunctionこれはあなたが望むものではありません。


firstfunction()コールバックを呼び出すときに2つのパラメーターを渡すように変更するだけなcallbackfunction()のか、それとも引数付きでコールバック関数を呼び出す匿名関数を作成する必要があるのか​​ 、あなたの質問からは不明です。

これら 2 つのオプションは次のようになります。

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

firstfunction(callbackfunction);

また

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

firstfunction(function() {
    callbackfunction(xxx, yyy);
});
于 2012-10-22T01:57:31.380 に答える
10

無名関数を使用します。

function foo( callback ) {
  callback();
}

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

foo( function(){ baz('param') });
于 2012-10-22T01:16:05.723 に答える
2

関数呼び出し時のパラメーターの追加。 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply

xdaz はすでに簡単なバージョンに回答しています。これは、可変量のパラメーターを使用した例です。

function someObject(){
        this.callbacks=new Array();
        this.addCallback=function(cb){
            this.callbacks[this.callbacks.length]=cb
        }
        this.callCallbacks=function(){
            //var arr=arguments; this does not seem to work
            //arr[arr.length]="param2";
            var arr = new Array();
            for(i in arguments){
                arr[i]=arguments[i];
            }
            arr[arr.length]="another param";
            i=0;
            for(i in this.callbacks){
                this.callbacks[i].apply(null,arr);
                //this.callbacks[i].apply(this,arr);
                //this is a ref to currrent object
            }
        }
        this.callCallbacksSimple=function(arg){
            for(i in this.callbacks){
                this.callbacks[i](arg,"simple parameter");
            }

        }
}
function callbackFunction(){
    for(i in arguments){
        console.log("Received argument: " + arguments[i]);
    }
}
var ObjectInstance=new someObject();
ObjectInstance.addCallback(callbackFunction);
ObjectInstance.callCallbacks("call callbacks");
ObjectInstance.callCallbacksSimple("call callbacks");
于 2012-10-22T02:17:32.083 に答える
1

これがあなたが探しているものだと思います。

何かをするために jQuery ajax を使用していて、名前付きのコールバックを渡しているとしましょう。ここには、アプリケーションでエラーを記録または処理するために使用できる onError コールバックがあります。これは、後ろに追加したい追加パラメーターを除いて、jQuery Ajax エラー コールバック シグネチャに準拠しています。

function onError(jqXHR, textStatus, errorThrown, yourOwnVariableThing) {
    console.error('Something went wrong with ' + yourOwnVariableThing);
}

これは関数が呼び出される場所ですが、追加のパラメーターが必要です

$.ajax("/api/getSomeData/")
 .done(onDone)
 .fail(onError) 
 .always(onComplete);

これは、追加のパラメーターを追加するためにできることです

$.ajax("/api/getSomeData/")
  .done(onDone)
  .fail(onError.bind(this, arguments[0], arguments[1], arguments[2], 'Moo Moo'); 
  .always(onComplete);

argumentsは、関数に渡されるすべての引数を含む JavaScript の配列であるため、それらの引数をコールバックに渡すだけです。

引数

練る

于 2016-07-20T09:23:20.273 に答える
1

functionはキーワードです。関数名として使用することはできません。

関数名がfooであるとすると、次のようにできます。

var param = 'what ever';
foo(function(response) {
  callbackfunction(response, param);
});
于 2012-10-22T01:15:55.647 に答える