👏

variable(変数)総まとめ!

2022/11/14に公開

variable 変数とは

文字列や数値などのデータに名前をつけることで、繰り返し利用できるようにする機能のこと。
objectの一種。
✅変数名は自由につけられる(わかりやすいのが基本)
✅変数を使うためには”宣言”が必要

変数のスコープ

scope 変数がどの場所から参照できるのかを定義する概念のこと
   変数の有効範囲

scopeの役割

  1. 変数名の競合を避ける 
    スコープ機能があることで、プログラム内で同じ名前の変数があっても、別物になる!
  2. メモリの消費を避ける
      javascriptにはガべージコレクションという機能があり、
      これによって無駄なメモリ消費を回避している。
      スコープがあることで関数の実行が終わればそのスコープに属する変数は不要とみなされ、
      ガレージコレクションの対象となる。
  • garbage collection
    直訳するとゴミ集め。プログラム実行で不要になった領域を自動的に解放する仕組み。

scopeの種類

  • グローバルスコープ
  • ローカルスコープ
      →関数スコープ
      →ブロックスコープ

グローバルスコープとローカルスコープの二種類があり、
さらにローカルスコープは関数スコープとブロックスコープに分類される。
05B5A9F6-8B81-47B6-B284-1AB5D78A57AE.jpeg

グローバルスコープ

プログラムのトップレベルで宣言された変数は、グローバル変数となり
プログラム全体のどこからでもアクセス可能になる

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