このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
js:function:scope [2021/04/12 10:59] y2sunlight |
js:function:scope [2021/04/12 14:34] tanaka |
||
---|---|---|---|
行 10: | 行 10: | ||
} | } | ||
console.log(func(' | console.log(func(' | ||
- | console.log(variable ); // 出力:' | + | console.log(variable ); |
</ | </ | ||
+ | \\ | ||
- | === グローバル変数 === | + | ===== グローバル変数 |
* 関数の外でvarにより宣言された変数 | * 関数の外でvarにより宣言された変数 | ||
* varを使用しない全ての変数はグローバル変数として扱われる | * varを使用しない全ての変数はグローバル変数として扱われる | ||
- | ※ 変数とはvar又はletにより生成される。それらのないものはグローバルオブジェクトのプロパティとして扱われる | + | ※ 変数とはvar又はletにより生成される。それらのないものはグローバルオブジェクトのプロパティとして扱われる。 |
+ | \\ \\ | ||
- | === ローカル変数 === | + | ===== ローカル変数 |
* 関数内でvarにより宣言された変数 | * 関数内でvarにより宣言された変数 | ||
行 28: | 行 30: | ||
※ ES2015以前はブロックスコープがなかった | ※ ES2015以前はブロックスコープがなかった | ||
- | 例 | + | === 例 === |
<code javascript> | <code javascript> | ||
var myVariable = ' | var myVariable = ' | ||
行 44: | 行 46: | ||
※ var myVariableをコメントアウトするとグローバルスコープを持つようになる \\ | ※ var myVariableをコメントアウトするとグローバルスコープを持つようになる \\ | ||
⇒ 変数の巻き上げ(hoisting)と呼ばれる | ⇒ 変数の巻き上げ(hoisting)と呼ばれる | ||
+ | \\ \\ | ||
- | ** ブロックスコープ< | + | ===== ブロックスコープ |
+ | < | ||
let(変数)又はconst(定数)によりブロックスコープを作る事ができる | let(変数)又はconst(定数)によりブロックスコープを作る事ができる | ||
- | 例 | + | === 例 === |
<code javascript> | <code javascript> | ||
let i = 1; | let i = 1; | ||
行 62: | 行 66: | ||
console.log(`${i} ${j} ${c}`); | console.log(`${i} ${j} ${c}`); | ||
</ | </ | ||
+ | \\ | ||
- | === Functionコンストラクタと関数リテラルのスコープ === | + | ===== Functionコンストラクタと関数リテラルのスコープ |
<code javascript> | <code javascript> | ||
行 82: | 行 87: | ||
</ | </ | ||
- | Functionコンストラクタによるスコープはグローバルスコープを持つ | + | Functionコンストラクタによるスコープはグローバルスコープを持つ。 |
+ | \\ \\ | ||
- | === Callオブジェクト === | + | ===== Callオブジェクト |
- | === スコープチェーン === | + | Call オブジェクト(Activation オブジェクトとも呼ばれる)は、関数が呼び出される度に内部的に自動生成されるオブジェクトです。関数の実行時に、引数とvar変数がCall オブジェクトに格納され、Arguments オブジェクトを参照するargumentsプロパティが生成されます。 |
+ | \\ \\ | ||
+ | ===== スコープチェーン ===== | ||
+ | スコープチェーンとは、グローバルオブジェクトとCall オブジェクトを連結したリストのことで、変数の名前解決のために使用されます。JavaScript は関数が呼び出されると、Callオブジェクトを生成しスコープチェーンの先頭に追加します。チェーンの最後にはグローバルオブジェクトが配置されています。 | ||
+ | |||
+ | JavaScript の変数の名前解決には、このスコープチェーンが利用され、チェーン先頭から末尾のグローバルオブジェクトまでが検索され、チェーンに含まれない変数は、未定義になります。 | ||