一呼び出し適用バインド
同じ点:
関数内のthisを変更して、違いを示すことができます
。
- call and applyは関数を呼び出し、関数でこれを変更します
- callとapplyによって渡されるパラメーターは異なります。callによって渡されるパラメーターはarg1、arg2です... applyの形式は配列の形式です
- bindは関数を呼び出さない、これを変更してcallのような値で渡すことができます
主なアプリケーションシナリオ:
- 継承を行うことが多い
- 適用は多くの場合、数学的オブジェクトの助けを借りて配列の最大値と最小値などの配列に関連しています
- bindは関数を呼び出しませんが、タイマーのthisポイントを変更するなど、thisポイントを変更します
どのパフォーマンスが優れていますか、電話または適用ですか?
2つのパラメータが渡された<=3
場合、同様の性能を>3
呼び出しのパフォーマンスが比較的良く、いくつかの性能より適用する場合
、一般的に少し遅れてコールを使用して開発します
呼び出し-前のパラメーター値スコープオブジェクトの背後にある
パラメーターは複数の適用が可能です。最初のパラメーターはスコープオブジェクトであり、2番目のパラメーターは配列を
バインドバインドする必要がありますが、すぐには実行できません。
var b = a.fn
var c = b.bind(a,1,2)
c() // c的作用域是a
2.高次関数とは
1.パラメータとして機能
2.戻り値として機能
三本矢印関数と通常の関数(関数)の違いは何ですか?
- アロー関数の構文は、通常の関数よりも簡潔です
- アロー関数には独自のthisがありません。この継承された関数が属するコンテキストでのthis call and applyなどのメソッドはこれを変更できません。
- アロー関数には(配列のような)引数はありません。... argだけが渡されたパラメーターセットを取得します
- アロー関数には独自のthisおよびプロトタイプがないため、アロー関数はnewで実行できません
この関数の異なる呼び出しメソッドの4つのポイントは、
- 通常の関数呼び出し
fn();// this指向window
- メソッド呼び出し
obj.fn(); // this指向obj
- これをコンストラクター内でコンストラクターとして呼び出し、コンストラクターによって作成されたオブジェクトを指すようにします。
- イベントのハンドラーとして
btn.onClick=function(){}; // 触发该事件的对象
- タイマーのパラメーターとして
setInterval(function(){},1000) // this指向window
概要:関数内のこれは、書き込み時には決定されず、呼び出されたときに関数によって決定されます
これを
このポインターに変更します。現在のオブジェクト(スコープオブジェクト)は、呼び出し元のないウィンドウです。
- アロー機能
- 変数を宣言して、ポインターvar that = thisを保存します。
- callは、関数の関数名を実行します。call(xx)は、関数を特定のスコープオブジェクトに配置して実行します。
- 関数名を適用します。apply(スコープオブジェクト)
5つの厳格モード
- 不合理で不合理なJS構文をいくつか削除し、奇妙な動作を減らします
- コード操作のいくつかの危険な側面を排除し、コード操作の安全性を確保する
- コンパイラの効率を向上させ、実行速度を向上させる
- クラスのエクスポート、インポートスーパー変数名がありません延びるにつれてのJavascriptの新バージョンが予約語としてのECMAScriptの将来のバージョンでは無効にいくつかの文法は道を切り開くために、将来的に定義することができ
strictモードをオンにします
'use strict' // 下面就会安装严格模式执行代码
ストリクトモードの変数
- 使用前に宣言する必要があります
- 宣言された変数を自由に削除することはできません
厳格モードこれは問題を示しています
- これはグローバルスコープで定義されていません
- コンストラクタがnewを追加しない場合、これを呼び出すとundefinedがポイントされます
- これはまだウィンドウを指しているタイマー
機能変更
- 関数パラメーター名の重複は許可されていません
- 非関数コードブロックで関数を宣言することはできません