ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptのcall、apply、bindの違いは何ですか

JavaScriptのcall、apply、bindの違いは何ですか

php中世界最好的语言
php中世界最好的语言オリジナル
2018-03-14 13:27:061494ブラウズ

今回は、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 での呼び出しの詳細な説明

以上がJavaScriptのcall、apply、bindの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。