今日 JS を書いているときにこのような問題に遭遇しました:
リーリー上記は私の JS コード部分です。ここで、init 関数の 2 番目の文、btn.onclick = btnHandle();
私の当初の意図はボタンをクリックして btnHandle 関数を実行することですが、実際の状況では、ページを更新した後、btnHandle 関数が直接実行されます。
次に、コードをこれに変更しました
btn.onclick = btnHandle(); ステートメントの () を削除すると、コードは思ったとおりに正常に実行されます。 ###何故ですか? btnHandle と btnHandle()
btn.onclick
接受一个函数,代表当 btn 被点击的时候执行这个函数,而你的btnHandle()
代表了执行这个函数,给btn.onclick
はその戻り値で、もちろん最初に実行されます。以下の書き方は、
btn.onclick
时,执行btnHandle
が関数の場合を意味します。btn.onclick = btnHandle(); このコードは、実行結果をクリックイベントに割り当てることを意味します
これは、init 関数の実行後、onclick がバインドされている場合、このコード行 btn.onclick = btnHandle();
は btnHandle メソッドの実行と同等であることを意味します。メソッドの戻り値を btn に代入します。
そして btn.onclick = btnHandle;
は btn.onclick = function(){xxxxx}; と同等です
つまり、 btnHandle 変数の参照は btn.onclick に割り当てられます
したがって、クリック イベントがトリガーされると、 btnHandle 代表の Function メソッドが実行されます