一、深い作用域(Scope)
1465 ワード
0 x 00、引用
プログラミング言語では、Scopeは変数とパラメータの可視性とライフサイクルを制御します.コードを書く私たちにとっても重要なサービスであり、名前の競合を減らし、自動メモリ管理を提供します.JavaScriptの役割ドメインはグローバル役割ドメインと関数役割ドメインの2種類に分けられます
0 x 01、関数役割ドメイン
≪関数役割ドメイン|Function Operation Domain|ldap≫:関数で定義されたパラメータと変数は、関数の外部では表示されません.関数の内部位置で定義された変数は、その関数の内部のどこにでも表示されます.ブロックレベルの役割ドメインと混同しないように注意してください.ブロックレベルの役割ドメインと混同しないでください.ブロックレベルの役割ドメインと混同しないでください.
demo
var foo = function {
var a =3 , b=5;
var bar = function(){
var b = 7, c = 11 // a =3 ,b =7 ,c =11
a += b + c; // a= 21,b = 7,c = 11
};
//bar() :a =3,b=5,c undefined
bar();
//bar() :a = 21,b =5( , a 3)
}
0 x 02、ES 6ブロックレベルの新しいドメイン
ほとんどのクラスC言語にブロックレベルの役割ドメインがあることを知っています.通常、1つのコードブロック{....}では、定義されたすべての変数はコードブロックの外部では表示されません.コードブロックに定義された変数は、コードブロックの実行が終了すると解放されます.これは優雅な特性です.
demo
{
let a = 7
var b = 5
}
console.log(a) // a is not defined
console.log(b) // 5
以上の結果は、var定義の変数がブロックレベルの役割ドメインの制約を受けないため(ここではグローバル変数と見なすことができる)、b=5が印刷される.letはブロックレベルの役割ドメインによって制約され、{...}のすべての変数がコードブロックの外部に表示されません
ES 6ではletとconstの違いについて説明します.簡単に言えば、letは主に変数を定義するために使用され、constは定数(定義時にすぐに値を割り当てなければならず、上書きできない)に使用されます.もちろん、ブロックレベルの役割ドメインにも従っています.
0 x 03、まとめ
実際には、関数の役割ドメインとブロックレベルの役割ドメインの違いに重点を置く必要があります.また、関数の役割ドメインに注目する必要があるのは、内部関数が外部関数を定義するパラメータと変数に自由にアクセスできることです.これは、私たちの閉パッケージの基礎を築きました.