高階関数と実行コンテキスト
:条件を満足する高次関数(のいずれかであることができる)1つまたは複数の入力を受け付ける機能として、1。
図2に示すように、関数の出力。
閉鎖満たす条件(すべて満たさなければならない):1、マネー機能は、外部変数の内部機能にアクセスするために内部関数、および関数について議論しました。
図2に示すように、内部関数が外部参照されます。
例:関数が食べます(){
VaRの食品= '翼';
復帰機能(){
console.log(食品)。
}
}
VARルック=食べます();
見て(); //手羽先
見て(); //手羽先
パッケージを閉じるの長所と短所:
利点:1:メモリ内の変数の長期存在;
2:グローバル変数の汚染を避けるために、
3:プライベートメンバがあります。
短所:パーマネントメモリは、メモリリークが発生する可能性があります不適切な使用を使用するメモリの量が増加します。
:ライフサイクルの実行コンテキストは、2つのフェーズで構成確立フェーズと実施段階。
実行環境ではJavaScript:
1、2、地球環境、関数の環境3、評価関数の環境(非推奨)
実行コンテキストの種類:1、グローバル実行コンテキスト2、機能の実行コンテキスト3、のeval関数の実行コンテキスト
確立フェーズの例:
fooExecutionContext = {
variavleObject:{
引数:{
0:10、長さ:1
}、
//引数オブジェクトを決定
I:10、//の形を決めるパラメータ
C:関数C()へのポインタ 、// 決意関数リファレンス
:不定、ローカル変数の初期値//未定義
B:未定義//ローカル変数の初期値は未定義です
}、
scopeChain:{}、
この : {}
}
実施段階例:
fooExecutionContext = {
variavleObject:{
引数:{
0:10、長さ:1
}、
I:10、
C:関数cへのポインタ()、
:「こんにちは」、//変数はハローに割り当てられています
B:関数privateBへのポインタ()//変数bは、privateB()関数が割り当てられています
}、
scopeChain:{}、
この : {}
}
アクションのチェーン:
3つのプロパティがあります:変数オブジェクト、およびこのスコープチェーン
式:(ScopeChain)= AO + [範囲]
この:
1、一般的な関数呼び出し
この特定のケースでは、予想外ではありませんグローバルオブジェクトである-window
2、オブジェクトの関数呼び出し
this
点数obj
3、コンストラクタの呼び出し
コンストラクタ関数内のオブジェクトの復帰後に作成されたオブジェクトではなく、コンストラクタを実行するよりも、直接オブジェクトを返します