単純な関数バインディング
関数バインディングは、JavaScript が DOM と対話するときによく使用され、それを特定の DOM 要素またはコレクションのイベント トリガーにバインドします。バインディング関数は、イベント ハンドラーで使用されるコールバック関数と組み合わされることがよくあります。コードの実行環境を維持しながら関数を変数として渡す。
< body>
メッセージ:「イベントハンドリング」、
handlerfun:function(){document.getelementbyid( 'btntest')。onclick = handler.handlerfun;上記の例ではハンドラー オブジェクトが作成され、handler.handlerFun() メソッドが DOM ボタンのクリック イベント ハンドラーとして割り当てられます。設計意図は次のとおりです。ボタンをクリックすると、このメソッドがトリガーされ、ダイアログ ボックスがポップアップしてハンドラーによって定義されたメッセージが表示されます。ただし、ダイアログ ボックスの内容は、クリック後には定義されません。クロージャに慣れている学生であれば、handler.handlerFun() メソッドの実行環境が保存されていないことが問題であることが簡単にわかります。このオブジェクトは最終的にハンドラーではなく DOM ボタンを指しています。この問題を解決するには、クロージャを使用して関数バインディング ステートメント
document.getElementById('btnTest').onclick=function(){
using ‐ クロージャを使用する ‐ }期待される結果を得るには、この解決策は onclick プログラム内でクロージャを使用して handler.handlerFun() メソッドを直接呼び出すことです。 もちろん、これはこのシナリオに固有の解決策です。複数のクロージャを作成すると、コードが難しくなる可能性があります。理解してデバッグするため。 Custom bind関数bind(fn、context){} onclick(handler.handlerfun、ハンドラー)。 ) 関数は、バインディング関数と実行環境の 2 つのパラメーターを受け取り、バインドされた関数が呼び出される実行環境を返します。単純に見えますが、その関数は非常に強力です。クロージャは bing() で作成され、渡された関数を呼び出すために apply() を使用し、実行環境とパラメータを apply() に渡します。 bind() ではなく関数です。返された関数が呼び出されると、すべての引数を指定して、指定された関数内で渡された関数が実行されます。上記の例では、すべてのパラメーターがバインドされた関数を通じて渡されるため、handler.handlerFun を呼び出してもパラメーター イベントを取得できます。
概要
関数が関数ポインターの形式で渡され、その関数が特定の環境で実行される必要がある場合、カスタムの binding() 関数を使用できます。これらは主にイベント ハンドラー、 setTimeout および setInterval に使用されます。ただし、このバインド方法は通常の関数よりも多くのメモリ オーバーヘッドを必要とするため、必要な場合にのみ使用するようにしてください。