閉包とは何ですか?クローズドの役割は何ですか?
1591 ワード
原文のリンク:https://github.com/YvetteLau/Blog/issues/35
パッケージの定義
「JavaScript高級プログラム設計」:
クローズドとは、別の関数のスコープにアクセスする権限を持つ変数の関数です.
「JavaScript権威ガイド」:
技術的な観点から言えば、すべてのJavaScript関数はクローズドされています.それらは対象です.それらはスコープチェーンに関連しています.
『あなたの知らないJavaScript』
関数が覚えていて、ある語法のスコープにアクセスできると、関数が現在の語法のスコープ外で実行されても、クローズドが発生します.
閉じたパッケージを作成します
閉包の役割
1.関数定義時に存在する語法のスコープにアクセスできる(回収を阻止する).
2.プライベート変数は、少なくとも一回(呼び出しごとに新しいモジュールのインスタンスを作成する)呼び出されなければならない外部の閉鎖関数が必要である. クローズド関数は、少なくとも1つの内部関数を返さなければなりません.このようにして、内部関数は、プライベート・スコープ内でクローズド・パケットを形成し、プライベートの状態にアクセスまたは変更することができます.
パッケージの定義
「JavaScript高級プログラム設計」:
クローズドとは、別の関数のスコープにアクセスする権限を持つ変数の関数です.
「JavaScript権威ガイド」:
技術的な観点から言えば、すべてのJavaScript関数はクローズドされています.それらは対象です.それらはスコープチェーンに関連しています.
『あなたの知らないJavaScript』
関数が覚えていて、ある語法のスコープにアクセスできると、関数が現在の語法のスコープ外で実行されても、クローズドが発生します.
閉じたパッケージを作成します
function foo() {
var a = 2;
return function fn() {
console.log(a);
}
}
let func = foo();
func(); // 2
クローズドは、関数が定義された時の動作領域にアクセスできるようにします.Fnのおかげで、foo()実行後、foo内部作用域は破壊されない.閉包の役割
1.関数定義時に存在する語法のスコープにアクセスできる(回収を阻止する).
2.プライベート変数
function base() {
let x = 10; //
return {
getX: function() {
return x;
}
}
}
let obj = base();
console.log(obj.getX()); //10
3.アナログブロックレベルのスコープvar a = [];
for (var i = 0; i < 10; i++) {
a[i] = (function(j){
return function () {
console.log(j);
}
})(i);
}
a[6](); // 6
4. モジュールを作成function coolModule() {
let name = 'Yvette';
let age = 20;
function sayName() {
console.log(name);
}
function sayAge() {
console.log(age);
}
return {
sayName,
sayAge
}
}
let info = coolModule();
info.sayName(); //'Yvette'
モジュールモードは二つの必須条件を備えています.