variable(変数)総まとめ!
variable 変数とは
文字列や数値などのデータに名前をつけることで、繰り返し利用できるようにする機能のこと。
objectの一種。
✅変数名は自由につけられる(わかりやすいのが基本)
✅変数を使うためには”宣言”が必要
変数のスコープ
scope 変数がどの場所から参照できるのかを定義する概念のこと
変数の有効範囲
scopeの役割
- 変数名の競合を避ける
スコープ機能があることで、プログラム内で同じ名前の変数があっても、別物になる! - メモリの消費を避ける
javascriptにはガべージコレクションという機能があり、
これによって無駄なメモリ消費を回避している。
スコープがあることで関数の実行が終わればそのスコープに属する変数は不要とみなされ、
ガレージコレクションの対象となる。
-
garbage collection
直訳するとゴミ集め。プログラム実行で不要になった領域を自動的に解放する仕組み。
scopeの種類
- グローバルスコープ
-
ローカルスコープ
→関数スコープ
→ブロックスコープ
グローバルスコープとローカルスコープの二種類があり、
さらにローカルスコープは関数スコープとブロックスコープに分類される。
グローバルスコープ
プログラムのトップレベルで宣言された変数は、グローバル変数となり
プログラム全体のどこからでもアクセス可能になる
var scope = "global"
//トップレベルからのアクセス
console.log(scope); //-> global
//関数内からのアクセス
(function(){
console.log(scope); //->global
})();
ローカルスコープ
グローバル変数以外の全ての変数はローカルスコープを持つローカル変数。
-
関数スコープ
関数(function)ごとに作られるスコープのこと
関数スコープでvar,let,constのいずれかで変数宣言をすると
関数の外部からはアクセスできず、関数の内側からのみ利用可能なローカル変数になる。 -
ブロックスコープ
ブロック{}ごとに作られるスコープのこと
ブロックスコープ内でlet,constを用いて宣言した変数は
ブロック外部からはアクセスできず、ブロックの内側からのみアクセス可能な
ローカル変数になる
✅ブロックスコープはブロックを必要とする文で生成される。
ex. ) if , else , for , for in , while , switch など。
また、これらの文を使わなくてもブロック単体を用いることで
スコープの作成は可能。
各種変数の宣言文とスコープについて
最初に変数を使うには宣言が必要と記述したが、
JavaScriptには「これは変数です」という宣言をするキーワードとして、
const、let、varの3つがある。
この宣言文とスコープの関係について
宣言 | 関数スコープ(function)を生成する | ブロックスコープを生成する |
---|---|---|
var | ○ | ❌ |
let | ○ | ○ |
const | ○ | ○ |
以上の表のように、
varは関数スコープのみを生成。
letとconstは関数、ブロックスコープの両方を生成。
※宣言分の省略とスコープ
宣言文(var,let,const)をつけずに変数宣言すると
どのスコープ内で宣言しても自動的にグローバルスコープになってしまう。
これによってバグも生じる可能性があるため、省略しないこと。
varはブロックスコープを持たないということについて
varはコードブロックを無視して実行するため、
ローカルスコープ(関数、ブロックスコープ)にはなることができない
ブロックスコープを持つletとconstについて
let
一度入れた値を後で変更すること可能
const
一度初期化するとその内容(値)を変更することはできない。
⇨変更不能なため、constで宣言された文は”定数”とも言われる。
Discussion