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