1. 範囲の概念:
スコープは、変数の有効範囲のコード スコープであり、変数のスコープと呼ばれます。
2. スコープチェーンの概念:
変数にアクセスする場合、まず現在のスコープで検索し、現在のスコープで見つからない場合は、上のスコープに戻ってグローバルスコープが見つかるまで検索します。この検索プロセスによって形成されるチェーンをスコープチェーンと呼びます。
3. 範囲は次のように分割されます。
- グローバルスコープ
- ブロックスコープ
- 関数スコープ (ローカルスコープ)
1.1 グローバル スコープ:関数内または中括弧内で宣言されていない変数はすべてグローバル スコープ内にあり、グローバル スコープ内で宣言された変数はプログラム内のどこからでもアクセスできます。
// 全局变量
var greeting = 'Hello World!';
function greet() {
console.log(greeting);
}
// 打印 'Hello World!'
greet();
1.2 関数スコープ (ローカル スコープ):変数が関数内で宣言されている場合、その変数は関数スコープの下にあります。これらの変数には関数内でのみアクセスでき、関数外ではアクセスできません。
function greet() {
var greeting = 'Hello World!';
console.log(greeting);
}
// 打印 'Hello World!'
greet();
// 报错: Uncaught ReferenceError: greeting is not defined
console.log(greeting);
上記のコードの関数内で宣言された変数または関数には関数の外部からアクセスできないことがわかります。つまり、関数内で定義された変数またはメソッドは関数のスコープ内にのみ存在します。
1.3 ブロックレベルのスコープ: ES6 では、キーワードlet
とは異なり、中括弧で使用および宣言された変数がブロックレベルのスコープに存在します。これらの変数には中括弧の外ではアクセスできませんconst
var
let
const
{
// 块级作用域中的变量
let greeting = 'Hello World!';
var lang = 'English';
console.log(greeting); // Prints 'Hello World!'
}
// 变量 'English'
console.log(lang);
// 报错:Uncaught ReferenceError: greeting is not defined
console.log(greeting);