0

私は JavaScript を学んでおり、それを理解しようとしています。あなたにとってはとても簡単かもしれませんが、説明が必要です。これが私のJavaスクリプトファイルのコードです。

function divClick(){
alert("Hello World!!!");
}

だから私はこのようにそれを呼び出す場合

$(document).ready(function(){
$("div").click(function(){
    divClick();
});});

すべてが正常に機能しており、div 要素をクリックしたときにのみアラート ボックスが表示されます。しかし、次のようにアクセスすると

$(document).ready(function(){
$("div").click(divClick());});

ページが読み込まれるとすぐに、アラート ボックスが自動的に表示されます。どうしても理解できないので、教えてください。URLがあれば教えていただけると嬉しいです。

4

4 に答える 4

5

多くのプログラミング言語 (Python、Java、C、C++ など) と同様に、次のような関数呼び出しがある場合

foo(a, b, ...);

すべての式abなどが最初に評価され、次にその結果が引数として に渡さfooれます。

の場合には

$("div").click(function(){
    divClick();
});

関数式である式function(){ divClick(); }is 。それを評価した結果が関数 (オブジェクト)です。したがって、関数が に渡されます。.click

の場合

$("div").click(divClick());

式はdivClick()関数呼び出しです。つまり、関数divClick実行され、それが返すものはすべて に渡され.clickます。


簡単な例:

function a(arg) {
    alert(arg);
}

function b() {
    return 42;
}

a(b()); // alerts 42

herebが最初に実行され、戻り値は42です。この値は引数として に渡されa、関数内で としてアクセスできますarg


URLがあれば教えていただけると嬉しいです。

それについて特別なことは何もありません。関数呼び出しが評価される方法です。引数として渡される関数に混乱するかもしれません。JavaScript では、関数は第一級市民であり、他の値 (数値、ブール値、文字列など) と同じように渡すことができます。

関数に関する資料:

于 2013-04-29T23:35:22.340 に答える
2

2 番目は、コールバック ハンドラdivClick()として返されたものをすぐに呼び出して渡します。.click()

代わりにこれを使用してください:

$("div").click(divClick);

ここでは、関数への参照をイベント ハンドラーとして渡しています。

于 2013-04-29T23:31:57.533 に答える
0

あなたが変更できるFelix Klingの答えを補完する

$(document).ready(function(){
   $("div").click(divClick());
});

為に

$(document).ready(function(){
   $("div").click(divClick);
});

この場合、「divClick()」の戻り値の代わりに「divClick」と呼ばれる関数オブジェクトを渡します。

動作する他の汚いフォームは、このようなものの機能を変更することです

function divClick(){
   return function(){ 
      alert("Hello World!!!");
   }
}
于 2013-04-29T23:54:34.407 に答える
0

この場合、イベントを登録するときclick、入力は、イベントが発生したときに呼び出される関数への参照です。最初のケースでは、無名関数を定義しています。ただし、2 番目のケースでは、divClick()は参照ではないため、評価され、関数divClickが参照を返すことが期待されます。評価中に、メソッドが実際に呼び出されるため、動作が発生します。

于 2013-04-29T23:39:44.417 に答える