変数var,const,letのスコープ

(Web関連用語)
https://developer.mozilla.org/ja/docs/Glossary/Scope
https://kakechimaru.com/scope_closure/

スコープとは、影響範囲のこと。
例えば、関数「red」の中で変数「apple」を定義する。一方で関数「blue」を定義する。
変数「apple」は、関数「red」の中では使うことができる。しかし、関数「blue」の中では使えない。
つまり、変数「apple」は関数「red」の中でしか影響されない。これがスコープの仕組みである。

function red(){
   var apple =  'りんご'; // 変数appleを定義
}
function blue(){
   console.log(apple); // コンソールに変数appleを出力
}
blue(); // 結果:ReferenceErrorエラーになる

JavaScriptでは関数レベルとブロックレベルのレキシカルスコープを採用している。

関数レベルのスコープ

関数レベルのスコープは文字通り関数内で有効ということになる。JavaScriptでvarを使って宣言した変数は、関数レベルのスコープを持つ。
例えば以下のコードであればConsoleにredが問題なく出力される。

function name(){
   if (true) {
       var color = 'red';
   }
   console.log(color); // red
}
name();

もしvarを使って宣言した変数がブロックレベルのスコープであれば、変数var colorはif文内でしか出力できない。

ブロックレベルのスコープ

constやletで宣言した変数は、ブロックレベルのスコープ変数を作成する。

function name(){
   if (true) {
       let color = 'red';
       console.log(color); // red
   }
   console.log(color); // Uncaught ReferenceError: color is not defined
}
name();

letで宣言した変数はブロックレベルのスコープになる。let colorをif文内で宣言しているのでif文内でしか許容できないということになる。if文外でlet colorを使用した場合はエラーになる。

inserted by FC2 system