1
window.onload = function() {
  document.getElementById('clickMe').onclick = runTheExample;
}

function runTheExample() {
  alert('running the example');
}

これは、onclickid=clickMeのhtml入力ボタンのイベントの単純なイベントハンドラーです。

runTheExample2行目で、関数の呼び出しの直後に関数の呼び出しが続かないのはなぜ()ですか?関数を呼び出すには、開く/閉じる括弧で期待する変数/オブジェクトを渡す必要があり、関数が何も期待しない場合でも、のような開き括弧と閉じる括弧を含める必要があると思いrunTheExample()ました。

4

7 に答える 7

6
document.getElementById('clickMe').onclick = runTheExample;

ここでの目的は、runTheExample()を呼び出すことではなく、関数runTheExampleへの参照をonclickイベントに割り当てることです。

内部的には、onclickイベントが発生すると、Javascriptは、上記のコードで指定した参照を介して関数runTheExampleを呼び出すことができます。

スニペット

var myFunction = function() { return 42; };

// Assigning the reference
myObject.callback = myFunction;

myObject.callback(); // Has the same effect as calling myFunction();

// Assigning by calling the function
myObject.callback = myFunction();

myObject.callback;   // Returns 42
myObject.callback(); // Exception! Cannot call "42();"

これはJavascript固有ではありません。参照による関数の受け渡しは、多くの言語で利用できます。

于 2013-01-10T03:23:07.557 に答える
5

括弧は、関数を呼び出す(呼び出す)ためにのみ使用します。に割り当てるときはonclick、参照によって渡すだけです。

これをよりよく理解するために、関数を宣言する他の方法について考えてみてください。

var runTheExample = function () {
  alert('running the example');
}

使用するメソッドに関係なくrunTheExample、関数への参照が含まれます(割り当て前に関数参照が使用できないなど、いくつかの違いがありますが、それは別の話です)。

于 2013-01-10T03:21:40.207 に答える
3

それを呼び出すのではなく、プロパティを設定しますonclick。が呼び出されるとonclick()、定義した関数が実行されます。ただし、のコンテキストはthisそれを呼び出すオブジェクト(document.getElementById('clickMe'))になることに注意してください。

于 2013-01-10T03:22:22.737 に答える
3

関数はjavascriptのオブジェクトです。この行は、click me要素のonclickプロパティをrunTheExample関数に設定しますが、そのときはその関数を呼び出しません。

var a =runTheExample; //sets a to runTheExample
a(); //runs the runTheExample function

したがって、関数名が()なしで参照されている場合、それは関数オブジェクトを参照しています。()を追加すると、それは関数の呼び出しであり、関数が実行されます。

于 2013-01-10T03:23:00.397 に答える
2

この場合、runTheExample関数は変数として扱われ、onclickイベントハンドラーに割り当てられます。関数を呼び出すには、関数名の後に()を使用します。ここにそれらを追加すると、ロード中にrunTheExample()が1回呼び出されてアラートが表示され、onclickハンドラーにnull値が割り当てられます。

于 2013-01-10T03:22:15.840 に答える
2

ここでは関数を呼び出していません。関数をイベントハンドラーとして設定しており、イベントが発生するまで関数は実際には呼び出されません。あなたが書いたものは関数を参照しています。それは実際にそれを呼ぶこととは異なる概念です。

于 2013-01-10T03:22:22.470 に答える
1

イベントにバインドするためrunTheExampleです。 追加すると、関数がトリガーされます。onclick
()

于 2013-01-10T03:21:54.393 に答える