scope
範囲は変数の近接性と生存期間を意味する.一方,これは変数の参照範囲を意味する.
JSのscopeは、グローバル変数とゾーン変数に分けられますが、グローバル変数は、その名の通り、グローバルでコードのどこでも参照できる変数で、ゾーン変数は定義された関数内でのみ参照できます.すべての変数にはスキャンがあり、グローバル変数にはグローバルスキャンがあり、領域変数には領域スキャンがあります.
JSの有効範囲には、以下の4つの特徴があります.
関数単位の有効範囲とは、関数コードブロック内で宣言された関数が関数コードブロック内でのみ有効であり、関数外部では無効であることを意味します.
また、変数をES 6に導入されたletとして宣言する場合、ボックスレベルの汎用範囲(box-level scope)を使用することができる.
グローバル領域で変数を宣言すると、任意の場所で参照できるグローバル変数になります.グローバル変数は、「グローバルオブジェクト」(Global Object)ウィンドウのプロパティです.JavaScriptがcontとして宣言された変数でない場合、変数名の重複が許可されるため、エラーメッセージは発生しません.グローバル変数を使用する必要がない場合は、領域変数を使用することが望ましい.変数のスキャンが狭いほど安全です.
JavaScriptは、関数宣言時に有効範囲を持ちます.
上記condition depress関数のdepressは、最近の上流地域、すなわち深セン駅のdepressである.したがって、kill lavesのcondition lavesを呼び出しても、kill laves関数の領域変数を参照するlavesではなく、グローバル変数lavesを参照します.
JSのscopeは、グローバル変数とゾーン変数に分けられますが、グローバル変数は、その名の通り、グローバルでコードのどこでも参照できる変数で、ゾーン変数は定義された関数内でのみ参照できます.すべての変数にはスキャンがあり、グローバル変数にはグローバルスキャンがあり、領域変数には領域スキャンがあります.
JSの有効範囲特徴
JSの有効範囲には、以下の4つの特徴があります.
関数単位の有効範囲(関数level-scope)
関数単位の有効範囲とは、関数コードブロック内で宣言された関数が関数コードブロック内でのみ有効であり、関数外部では無効であることを意味します.
また、変数をES 6に導入されたletとして宣言する場合、ボックスレベルの汎用範囲(box-level scope)を使用することができる.
// function-level scope
let brave_girls = 'rollin'
function k_pop(){
let brave_girls = 'just dirve'
console.log(brave_girls)
}
k_pop() // 'just drive'
console.log(brave_girls) // 'rollin'
// box-level scope
let chicken = 'nene'
{
let chicken = 'kyochon'
console.log(chicken) // 'kyochon'
}
console.log(chicken) // 'nene'
重複変数名の許可
グローバル領域で変数を宣言すると、任意の場所で参照できるグローバル変数になります.グローバル変数は、「グローバルオブジェクト」(Global Object)ウィンドウのプロパティです.JavaScriptがcontとして宣言された変数でない場合、変数名の重複が許可されるため、エラーメッセージは発生しません.グローバル変数を使用する必要がない場合は、領域変数を使用することが望ましい.変数のスキャンが狭いほど安全です.
大域を黙示する(大域を隠す)
function pizza(){
domino = 'is good'
}
pizza()
console.log(domino) // 'is good'
上の関数ではdominoという変数は宣言されず、割り当てられただけです.pizza関数にdominoという変数がなく、親領域(グローバル経由)にdominoの変数が見つからない場合、JSはデフォルトdominoをグローバル変数として使用します.Lexical Scoping(static scoping)
JavaScriptは、関数宣言時に有効範囲を持ちます.
let dismas = 'live'
function condition_dismas(){
console.log(dismas)
}
function kill_dismas(){
dismas = 'die'
condition_dismas();
}
kill_dismas() // 'die'
condition laves関数を実行する前に、laves値を再割り当てすることで変数lavesの値を変更します.let dismas = 'live'
function condition_dismas(){
console.log(dismas)
}
function kill_dismas(){
let dismas = 'die'
condition_dismas();
}
kill_dismas() // 'live'
kill laves関数の内部でlaves変数を宣言して割り当てると、結果値が変化します.関数を最初に宣言した瞬間、関数内部の変数はミラーに最も近い位相範囲の変数を参照します.上記condition depress関数のdepressは、最近の上流地域、すなわち深セン駅のdepressである.したがって、kill lavesのcondition lavesを呼び出しても、kill laves関数の領域変数を参照するlavesではなく、グローバル変数lavesを参照します.
Reference
この問題について(scope), 我々は、より多くの情報をここで見つけました https://velog.io/@whdid502/scopeテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol