知識の概要を学びます
1.閉鎖知識の統合
閉鎖機能:
1.関数は、外部変数アクセス組み込み関数を実装することができます
JavaScriptが唯一の機能サブルーチン内のローカル変数に読み取ることができる2、クロージャは、単にとして解釈することができる「関数内定義関数」。
用途:
用途:
1.あなたは、関数内のローカル変数を読み取ることができます
。2.(ローカル変数のライフサイクルを延長する)これらの変数は、常にそれらのメモリに格納されてみましょう
。2.(ローカル変数のライフサイクルを延長する)これらの変数は、常にそれらのメモリに格納されてみましょう
クローズドパッケージのシーンが表示されます:
1:外部関数は、関数内の変数にアクセスすることができます
2:機能の即時実行で
3:閉鎖は、メモリ変数内部に残ることができる(ノードのセットにイベントを結合、各ノードは、インデックス値を取得します)
4:関数のカリー化
//インタビューの質問:(2)(3)(4)ビット24を取得するための関数呼び出しは、fnの結果、この関数が書かれているものです?
関数fn(A){
復帰機能(B){
復帰機能(C){
console.log(a * b *表C)。
}
}
}
FN(2)(3)(4)。
//関数カリー化 - >使用閉鎖。
クロージャ影響:
大量のメモリを消費しますが、変数の関数は、それらのメモリに格納されているようになります閉鎖に伴う1は、それはそれ以外の場合は問題にメモリリークが発生することがありIEでWebページのパフォーマンスの原因となります、可能性悪用の閉鎖ではありません
図2に示すように、可変クロージャ外部関数の値は、内部を変更する機能。そうしないと、これは受け入れられない、プライベート変数の一般的な変数になります。だから、内部変数の親関数の値を変更しないでください
故意にクロージャの使用を最小限に抑え、クロージャを使用しないでください。
クロージャがメモリを開きます、それはメモリリークを引き起こす可能性があります
拡張:JSごみリサイクルマシン
1:関数が終了した場合の機能は、メモリ内の変数空間の実現に開くために、保存された機能は、メモリが呼び出し機能を解放する時に開くようになったが、変数の初期化は、上記の手順を繰り返し続けます...
2:内部変数は、関連する状況の関数である場合は、変数が撤回されないで引用しました。
インタビュー関連:
クロージャとは何か:
1:外部関数は、関数内の変数にアクセスすることができます
2:クロージャ機能及び内部変数の寿命を延ばす、変数値をメモリに破壊されません
説明する例:
目的:関数内再機能外部アクセス変数へ。
関数fn(){
= 10があります。
関数の戻り値(){ 関数fn(閉鎖機能)を返す//
A ++
返します。
}
}
)N = FN(でした。
console.log(N())。
関数fn(){
= 10があります。
A ++
console.log(A)。
}
FN();
FN();
FN();
FN();
FN();
2.オブジェクト指向レビュー
思考:使用法内部オブジェクトの複数のインスタンスが一致しています。
関数者(氏名、年齢){
this.name =名前;
this.age =年齢;
this.eat =関数(){
}
this.sleep =関数(){}
}
VaRのP1 =新しい人( 'WS'、 '10');
VaRのP2 =新しい人( 'X'、 '30');
console.log(p1.eat == p2.eat); // falseを限り、新しいスペースを開くためにメモリに戻ったよう。
プロトタイプ:
パブリックストレージのプロパティとメソッド
拡張属性とメソッド
保存メモリ
継承!!!!!!!!!!
例如:関数者(氏名、年齢){
this.name =名前;
this.age =年齢;
}
// person.prototype.eat =関数(){}
// person.prototype.sleep =関数(){}
person.prototype = {
関数(){}:食べます
スリープ:関数(){}
}
3.スコープ問題
ローカルスコープ(スコープ機能)
グローバルスコープ
スコープチェーン:チェーンの変数は、現在の変数自体を見つけることができない場合、最初の訪問自体への道を見つけるためには、親関数に見えます。
4.プロトタイプチェーンの問題
//p1.work(); //直接アクセス方式コンストラクタプロトタイプ上のオブジェクトをインスタンス化します。
//console.dir(Person); //コンストラクタ関数プロトタイプ上記方法があります
p1はメソッド内のオブジェクトのインスタンスで観察//印刷???????
//console.dir(p1); //上記__proto__の方法で配置されたオブジェクトをインスタンス化します
/ *
分析:
p1があるので人のコンストラクタを構築します。
プロトタイプ法上の人物
オブジェクトP1の__proto__方法の例
推測:Person.prototypeとP1 .__ proto__は、同じオブジェクトを指しています。
Person.prototype == P1 .__ proto__ //真
Person.prototypeとP1 .__プロトタイプオブジェクトへのproto__は同じです
P1 .__プロト__。食べる()オブジェクト・インスタンスコンストラクタ__proto__アクセスポイントによってP1のプロトタイプオブジェクトPerson.prototype
P1 .__プロト__.__プロト__(食べます)。
プロトタイプチェーン:プロトタイプチェーンと呼ばれるリンクインスタンスオブジェクトのプロトタイプオブジェクト。表現__proto__
プロトタイプチェーン・ルックアップ・プロセス:
直接的なリターンがある場合は、オブジェクトの最初のインスタンスでは、独自のプロパティを見つけるために、
何の現在のプロパティがない場合、オブジェクトの__proto__構造によってアクセスのプロトタイプオブジェクトのコンストラクタのプロトタイプを見つけます。
現在のコンストラクタがまだない場合には、__proto__で検索/ Object.protoptypeようになりました
プロトタイプやコンストラクタ__proto__及び(コンストラクタ)との関係???
プロトタイプオブジェクトに上記関数プロトタイプ点の存在のみ
これは__proto__プロトタイプオブジェクトコンストラクタのプロトタイプ点が存在する物体を指します。
コンストラクタは、オブジェクトコンストラクタの構成例を指して構成されています