簡単なことから始めて、あなたが望むことをするコードをあなたに与えましょう:
function showimage(b)
{
//if alert was here, it would show the value of b
$("#lightboxholder").show("fast","",function ()
{
alert(b); // interestingly enough, it knows what b is here
});
}
そこから2つの主な質問が生じます:なぜあなたがしようとしていることがうまくいかないのか、そしてなぜ私がしていることがうまくいくのか。あなたがしていることから始めましょう。
匿名関数を呼び出しているかのように、パラメーターを関数に渡そうとしています。ただし、関数を呼び出していません。関数を定義し、関数自体をjQueryのパラメーターとして指定します。次に、jQueryは、必要な時点で定義した関数を呼び出します。その時点で値を提供する必要があり、提供しないため、達成しようとしている結果は得られません。したがって、あなたがしようとしている方法で引数を渡すことはできません。
次に、私のバージョンが機能する理由に移りましょう。これは、javascriptでのカプセル化と呼ばれるものです。基本的に、関数を定義する場合は、関数を定義するコンテキストで使用可能な任意の変数を使用できます。次に、Javascriptは、使用されているものだけが定義した関数のコンテキストに含まれていることを自動的に確認します。これは、関数を呼び出す場所とは完全に独立しており、関数を定義する場所にのみ依存します。そのため、showImage関数からb値を「借用」し、無名関数で使用するだけです。