0

自己呼び出し関数を呼び出そうとしていますが、機能していないようです。以下のコードを見ると、アラート (テスト) はできますが、別の関数で呼び出されたときはできません。アドバイスしてください - ありがとう

var test = (function(a,b){
       return a*b;
           })(4,5);

function myFunc() {};

alert(test); // working
alert(test.call(myFunc, 10,5)); // not working
4

2 に答える 2

2

行 0 で関数を評価し、戻り値「20」を に代入していtestます。20 は関数ではなく数値なので、呼び出すことはできません。代わりに試してください:

var test = function(a,b){
  return a*b;
};
alert(test(4,5));
alert(test(10,5));
于 2013-01-21T20:35:56.727 に答える
0

即時呼び出し関数は、スクリプトがロードされたときにすぐに実行される関数です。あなたの例では、 test の次の関数がすぐに実行され、値 20 が返されます。

あなたが本当に欲しいものは次のようなものだと感じています:

var test = (function()
{
    var a = 4,
        b = 5;

    return function()
    {
        return a*b;
    }
}());

したがって、上で書いたように、test は 20 に設定されません。代わりに、乗算abて 20 を返す関数に設定されます。なぜですか? 関数をすぐに呼び出すと、実際の値が返されません。さらに別の関数を返し、その関数は計算しようとしている実際の値を返します。

于 2013-01-21T20:41:36.830 に答える