今回は、JavaScriptのcall、apply、bindの違い、JavaScriptでcall、apply、bindを使用する際の注意事項についてお届けします。以下は実際的なケースです。見てみましょう。
まず、ES5 で提案された strict モードの概念を追加します。
“use strict”
と書くだけで、次の JavaScript コードが strict モードで記述されることを現在のブラウザーに伝えます。
function fn() { console.log(this); }
fn.call(); // 通常モードではウィンドウ、厳密モードでは未定義
fn.call(null); // 通常モードではこれはウィンドウ、厳密モードでは null
fn.call(unknown); // 通常モードではこれはウィンドウ、厳密モードでは未定義です
apply メソッドと call メソッドはまったく同じ機能を持ち、どちらもメソッドの this キーワードを変更するために使用されます。メソッドを実行すると、厳密モードでも非厳密モードでも、最初のパラメータがnull/未定義の場合のルールは同じですが、関数のパラメータを渡す場合に違いがあります。
function fn(num1, num2) { console.log(num1 + num2); console.log(this); }fn.call(obj , 100 , 200);fn.apply(obj , [100, 200]);123456
fnにパラメータを渡す呼び出しでは値を一つ一つ渡しますが、applyでは一つ一つ渡すのではなく、fnに渡す同じパラメータ値を配列に入れます この操作は、fn の仮パラメータに 1 つずつ値を代入することにも相当します。
bindメソッドはapplyやcallとは少し異なり、fnのthisを事前に必要な結果に変更し、将来使用する場合は対応するパラメータ値を準備します。つまり、bind も方向を変更できますが、apply や call とは異なり、すぐには実行されません。
var tempFn = fn.bind(obj, 1, 2); tempFn();
コードの最初の行は、fnのこれをobjに変更し、2つのパラメータ値1と2をfnに渡すだけですが、この時点ではfn関数は実行されません。bindを実行すると戻り値が返されます。この戻り値 tempFn は、fn の this を変更した結果です。
注: バインドメソッドは IE6~8 と互換性がありません。
この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトその他の関連記事に注目してください。
推奨読書:
Spring Boot のスケジュールされたタスクの使用方法
以上がJavaScriptのcall、apply、bindの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。