0

重複の可能性:
JavaScript: var functionName = function() {} vs function functionName() {}

なぜこれが機能するのですか...

$("#clickme").click( showAlert );

function showAlert() {
  alert( "Hiya" );
} 

…でもこれじゃない…?

$("#clickme").click( showAlert );

var showAlert = function() {
    alert( "Hello" );
}
4

2 に答える 2

4

これは巻き上げが原因で発生しています。
最初のケースでは、コードは次のように解釈されます(関数宣言が最初にどのように評価されているかに注意してください)。

function showAlert() {
   alert( "Hiya" );
}
$("#clickme").click( showAlert ); 

そしてあなたの2番目は次のように解釈されます:

var showAlert;
$("#clickme").click( showAlert );

showAlert = function() {
   alert( "Hello" );
}

は変数宣言であり、関数宣言ではないため(キーワードにshowAlert注意)、変数宣言が最初に評価され、イベントハンドラーをバインドするまでに、変数が宣言されますが、値は保持されます。 varshowAlertundefined

これが巻き上げの機能です。変数と関数の宣言をクロージャーの先頭に巻き上げます。ここSOを含め、そこに住む
ため の優れたリソースがいくつかあります。

于 2012-11-20T23:03:55.663 に答える
3

最初はFunction Declaration..

2番目はfunction Expression..

関数宣言は、コードが実行される前に最初に読み取られます。

したがって、最初のケースが機能します。2 番目の方法は、関数が割り当てられるまでにはまだ定義されていないため、機能しません..

だからこれはうまくいく

var showAlert = function() {
    alert( "Hello" );
}

$("#clickme").click( showAlert );

つまり、関数を定義してからハンドラを割り当てます

于 2012-11-20T22:59:01.137 に答える