1

私はこれについて少しの間壁に頭をぶつけてきました、そして私はそれを完全に理解することができないようです。他にも非常によく似た質問がたくさんあることを私は知っています、そして私はそれらのほぼすべてを見てきました、そしてそれらのどれも私が探している答えを持っていないようです(しかし、再び、私は盲目になる可能性があります今日)。

そのため、コールバックを実行するためのパラメーターとして関数を渡すJavaScript関数があります。関数にはパラメーターが含まれているため、コールバックを実行するときは、コールバックが呼び出されたときに渡すパラメーターをフォロースルーする必要があります。

ただし、2番目のパラメーターを追加すると、値は常に未定義になります。

サンプルコード:

<div style="padding: 15px;">
<a href ="#" onclick="FirstFunction('first param');">test</a>
</div>

//call the first function from the click event and pass in the value
function FirstFunction(param1) {
    //call my process function, but pass in a function as a parameter with the value from param1
    myProcessFunction(function(){SecondFunction(param1)});
    return false;
}

function SecondFunction(param1, param2) {
    alert(param1 + ', ' + param2);
}

function myProcessFunction(callback) {
    if (typeof callback == 'function') {
        //call my passed in function, return the original values, along with a new value into my "SecondFunction"
        callback(this, 'second param');
    }
}

どんな助けでもいただければ幸いです。

私はもう試した:

callback.call(this, 'param 2')

callback(arguments, 'param 2')

callback.call(arguments, 'param 2')

そしておそらく他の約20の組み合わせ...だから私は今仕事をしていると思います。

これが私のjsFiddleです:

http://jsfiddle.net/FVsDK/8/

編集

Janiに感謝します、これがjsFiddleの実用的なソリューションです:http: //jsfiddle.net/FVsDK/9/

4

1 に答える 1

3

エラーは、コールバックが少し混乱しているために発生します:)

myProcessFunction(function(){SecondFunction(param1)});

これは、コールバック関数を使用してmyProcessFunctionを呼び出しますfunction() { ... }

したがって、myProcessFunctionでは、callback(this, 'second param');パラメータをまったく使用しない上記の関数を呼び出しています。

secondFunctionがmyProcessFunctionからパラメーターを取得するようにする場合は、匿名のコールバックの代わりにそれを渡す必要があります。

myProcessFunction(SecondFunction)

ここで、SecondFunctionのパラメーターはとにthisなり'second param'ます。

または、param1を渡す場合は、次のようにすることもできます。

myProcessFunction(function(a, b) { SecondFunction(param1, a, b); })

ここで、SecondFunctionのパラメーターはparam1との値にthisなり'second param'ます。

于 2012-05-24T15:11:17.523 に答える