いわゆる閉鎖は、以下を参照する必要があります。現在の関数以外の変数、つまり作成されたコンテキスト環境を読み取る内部関数。
コードコピーは次のとおりです。
function hello(){
var char = "hello、world";
function print(){
console.log(char);
};
print();
}
ここの印刷関数は、外部のhello関数のchar変数を指していることに注意する必要があります。したがって、ここでは、
コードコピーは次のとおりです。
こんにちは世界
ある意味では、この関数はスコープに起因する必要があります。もちろん、この変数を宣言したときにエラーが発生しない限り、直接Charにアクセスする方法はありません。のように
コードコピーは次のとおりです。
function hello(){
char = "hello、world";
function print(){
console.log(char);
};
print();
}
VARが失われているからといって。
コードコピーは次のとおりです。
ここでこんにちはが閉鎖になります。閉鎖は特別なオブジェクトです。関数と、関数が作成される環境の2つの部分で構成されています。環境は、閉鎖が作成されたときの範囲内のローカル変数で構成されています。
JavaScriptの閉鎖とこれ
これと議論を読むときに問題があるかもしれないことに注意すべきです。
コードコピーは次のとおりです。
function hello(){
this.char = "hello、world";
function output(){
char = "私はハローワールドではありません";
console.log(this.char);
};
return output();
}
もちろん、この例は十分に適切ではありません。したがって、この問題を説明するために追加の例が必要です。以下は、この問題を説明するための「JavaScript Advancedプログラミング」の例です。
コードコピーは次のとおりです。
var name = "The Window";
var object = {
名前:「私のオブジェクト」、
getNameFunc:function(){
return function(){
this.nameを返します。
}
}
};
object.getNameFunc()()()
しかし、この使用法は本当にあり、解決策は、前の記事で述べたように、「JavaScriptのこれに関する知識」を保存することです。
コードコピーは次のとおりです。
var name = "The Window";
var object = {
名前:「私のオブジェクト」、
getNameFunc:function(){
var that = this;
return function(){
that.nameを返します。
}
}
};
object.getNameFunc()()()
JavaScriptの閉鎖と読み取りおよび書き込み変数
変数をうまく処理しなければ、それらを変更することもできます。
コードコピーは次のとおりです。
function hello(){
var char = "hello、world";
戻る{
セット:function(string){
char = stringを返します。
}、
印刷:function(){
console.log(char)
}
}
}
var says = hello();
say.set( '新しいハロー、ワールド')
say.print()//新しいHello World
JavaScriptの閉鎖とパフォーマンス
引用MDC
コードコピーは次のとおりです。
特定の特別なタスクに閉鎖が必要でない場合、閉鎖は処理速度やメモリ消費を含むスクリプトのパフォーマンスにマイナスの影響を与えるため、必要に応じて他の機能に関数を作成することは賢明ではありません。
記事も述べた。
コードコピーは次のとおりです。
たとえば、新しいオブジェクトまたはクラスを作成する場合、メソッドは通常、オブジェクトのコンストラクターで定義されるのではなく、オブジェクトのプロトタイプに関連付ける必要があります。その理由は、これにより、コンストラクターが呼び出されるたびにメソッドが1回(つまり、各オブジェクトの作成のために)再割り当てされるためです。