1
jQuery.fn.testeee = function(_msg)
{
    alert(_msg);
    $(this[0]).overlay({ 
        onBeforeLoad: function() 
        {
            alert(_msg);
        }
    }).load();
};
$("#popup").testeee ('test');
$("#popup").testeee ('another_test');

これは次のように表示されます。

  • テスト
  • テスト
  • another_test
  • テスト

onBeforeLoad に割り当てられた匿名関数内の alert() は、「テスト」を表示し続けます。私はこれを試します:

jQuery.fn.testeee = function(_msg)
{
    alert(_msg);
    $(this[0]).overlay({ 
        onBeforeLoad: static_func(_msg)
    }).load();
};
function static_func(_msg) 
{
    alert(_msg);
}
$("#popup").testeee ('test');
$("#popup").testeee ('another_test');

そして、それはうまく機能します。以下が表示されます。

  • テスト
  • テスト
  • テスト
  • テスト

なぜこれが起こっているのか知っている人はいますか?

4

1 に答える 1

2

次のようなオブジェクトを作成する場合:

{
   onBeforeLoad: static_func(_msg)
}

呼び出す関数を指定するのではなく、関数をすぐに呼び出して戻り値をオブジェクトに格納します。

呼び出す関数を指定するには、関数名のみを使用します。

{
   onBeforeLoad: static_func
}

自分で指定したパラメーターを使用して関数を呼び出したい場合は、無名関数でラップして、変数を含むクロージャーを作成する必要があります。

{
   onBeforeLoad: function() { static_func(_msg) }
}
于 2009-09-09T05:30:53.057 に答える