1

値を渡したいと思ったとき、うまくいきませんでした。これは私のコードです、

function showimage(b)
{
    //if alert was here, it would show the value of b
    $("#lightboxholder").show("fast","",function (b)
    {
        alert(b);//but now when the alert is here, it is not showing the value of b
    });
}

私は何か男が恋しいですか?前もって感謝します!

4

4 に答える 4

2

内部関数は新しい引数で呼び出されるためb、新しい変数に置き換えられます。

-に置き換えるfunction (b)function ()、内側bは外側の関数に与えられたものになります。

于 2012-10-23T16:45:59.070 に答える
1

これは、関数内ののローカル値がshowImage関数内のbの値をオーバーライドしているためです。b

于 2012-10-23T16:44:07.930 に答える
0

これを試して、

ライブデモ

function showimage(b)
{
    //if alert was here, it would show the value of b
    $("#lightboxholder").show("fast", function ()
    {
        alert(b);//but now when the alert is here, it is not showing the value of b
    });
}
于 2012-10-23T16:44:39.353 に答える
0

簡単なことから始めて、あなたが望むことをするコードをあなたに与えましょう:

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値を「借用」し、無名関数で使用するだけです。

于 2012-10-23T16:51:43.420 に答える