まだ閉鎖を理解していますか?Do you understand of closures ?
1247 ワード
閉鎖を理解しますか?
この質問は実際には次のように質問されています.閉鎖は何ですか? 閉包はどんな役割がありますか?
カバンは何ですか
MDNの解釈:閉包は関数とその関数を宣言する文法環境の組合せである.
私の理解では、閉パッケージ=『関数』と『関数内でアクセス可能な変数の合計』です.
簡単な例を挙げます.
クローズドパッケージの役割
閉包の最大の役割は変数を隠すことであり、閉包の大きな特性は、内部関数が外部関数で宣言されたパラメータと変数に常にアクセスできることであり、外部関数が返された(寿命が終わる)後でも
この特性に基づいてJavaScriptは,プライベート変数,特権変数,格納変数などを実現できる.
私有変数の例として,私有変数の実現方法は多く,約束された(変数名に_を加える)ことによって,Proxyエージェントによるものもあれば,Symbolという新しいデータ型によるものもある.
しかし、本当に広く流行しているのは、実は閉パッケージを使うことです.
関数内の
この質問は実際には次のように質問されています.
カバンは何ですか
MDNの解釈:閉包は関数とその関数を宣言する文法環境の組合せである.
私の理解では、閉パッケージ=『関数』と『関数内でアクセス可能な変数の合計』です.
簡単な例を挙げます.
(function() {
var a = 1;
function add() {
var b = 2
var sum = b + a
console.log(sum); // 3
}
add()
})()
add
関数自体と、その内部にアクセス可能な変数、すなわちa = 1
とを組み合わせて閉パケットと呼ぶのは、それだけである.クローズドパッケージの役割
閉包の最大の役割は変数を隠すことであり、閉包の大きな特性は、内部関数が外部関数で宣言されたパラメータと変数に常にアクセスできることであり、外部関数が返された(寿命が終わる)後でも
この特性に基づいてJavaScriptは,プライベート変数,特権変数,格納変数などを実現できる.
私有変数の例として,私有変数の実現方法は多く,約束された(変数名に_を加える)ことによって,Proxyエージェントによるものもあれば,Symbolという新しいデータ型によるものもある.
しかし、本当に広く流行しているのは、実は閉パッケージを使うことです.
function Person(){
var name = 'cxk';
this.getName = function(){
return name;
}
this.setName = function(value){
name = value;
}
}
const cxk = new Person()
console.log(cxk.getName()) //cxk
cxk.setName('jntm')
console.log(cxk.getName()) //jntm
console.log(name) //name is not defined
関数内の
var name = 'cxk'
はgetName
とsetName
の2つの関数のみがアクセスでき、変数をプライベート化することに対して外部はアクセスできません.