7章スコープ

「スコープ」は変数、定数および引数が有効な範囲(いつ、どこで定義されていると見なされるか、どこで値を参照したり変えたりできるのか)を決めるものです。既にスコープに関して何度か触れましたが、この章で詳しく説明します。

まず次の例を見てください。

example/ch07/ex07-00-1/main.js

function f(x) {
  return x + 3;
}
console.log(f(5)); // 8
console.log(x); // エラー    ReferenceError: x is not defined(xは定義されていない)

上の例を実行するとf(5)から返される8は表示されますが、関数の外でxの値を見ようとすると、xが定義されていないというエラーになってしまいます。xは関数fの中でしか参照することができません。このとき、「xのスコープは関数fである」と言います。

関数の引数は関数の本体でしか有効ではありません。関数の仮引数は関数が呼び出されるまでは存在していないのです。

関数は2回以上呼ばれる場合があります。関数は呼ばれるたびにその引数の実体が生成され、呼び出された関数から制御が戻るときにスコープから消えます。

また、変数と定数は生成されるまで存在していません。つまりletあるいはconstで宣言されるまでは、スコープにはありません(varは特別です。「 7.8 関数のスコープと巻き上げ」で説明します)。

[注記]

プログラミング言語によっては、「宣言(declaration)」と「定義(definition)」の間に明確な区別がなされている場合があります。典型的には、変数の「宣言」は識別子(名前)を付与することでその存在を公表することになります。一方、「定義」は、多くの場合それを宣言し、かつ、それに値を与えることを意味します。 ...

Get 初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.