関数を呼び出すと、引数がすぐに実行され、関数に渡すパラメータが提供されるためです。あなたが書くときに
var temp = arg;
func(temp);
:
$("#btn_1").click(alert("Btn 1 Clicked"));
それはと同等です:
func(arg);
はと等価であることは明らかである
var temp = alert("Btn 1 Clicked");
$("#btn_1").click(temp);
、この形で、 0を呼び出す前にアラートが発生するを使用して、イベントのリスナーを追加します。
アクションを遅らせるには、引数として関数を指定する必要があります。関数定義自体は、コードの実行を引き起こさず、後で呼び出されるときにのみ実行されます(これはコールバックと呼ばれます)。
匿名関数である必要はありませんが、名前を付けることもできます。
function myAlert() {
alert("Btn 1 Clicked");
}
$("#btn_1").click(myAlert);
しかし、あなただけの.click()
の引数として関数の名前を提供していることに注意してください、すぐにそれを呼び出しますので、あなたは、クリックイベントが発生するまで遅らせない、myAlert()
を書いていません。
@Titusが述べたように、click()
は、コールバックとして実行する必要があるため、その引数が関数であると想定しています。しかし、あなたは機能を返すために別の関数を呼び出すことができます。
function alerter(message) {
return function() {
alert(message);
}
}
$("#btn_1").click(alerter("Btn 1 Clicked"));
お知らせalerter()
ことが直接alert()
を呼び出すことはありません、それが呼び出されたときにalert()
を呼び出す別の関数を返します。上記のように、clickイベントがそのコールバックを実行するまでは起こりません。
のいずれかを使用して呼び出す関数を参照することができます '警告(someFunc())'考えてみましょう - 最初の実行される機能、 '警告()'や 'someFunc()'? 'alert(someFunc(anotherFunc()))' ... – nnnnnn
中学校から 'PEMDAS'を覚えていますか? 'P'もここに適用されます。 – dandavis