0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

javascriptでの変数の宣言方法による違い

Posted at

javascriptでの変数の宣言方法による違いをまとめておきます。letやらvarやらです。
宣言、普段なんとなくやっちゃうんですが、大事ですよね。

1. let

  • スコープ: ブロックスコープ(if文やfor文などのブロック内でのみ有効)
  • 再代入: 可能(変数の値を変更できる)
  • 再宣言: できない(同じスコープ内で再宣言を試みるとエラー)
  • 巻き上げ: 巻き上げはされるが、一時的死角(TDZ)があるため、宣言前にアクセスするとエラーになる
  • グローバルオブジェクトへの追加: しない(グローバルスコープでletで宣言した場合、windowglobalオブジェクトにプロパティとして追加されない)
let x = 10;
x = 20;  // 再代入は可能
console.log(x);  // 20

2. const

  • スコープ: ブロックスコープ(letと同様にブロック内でのみ有効)
  • 再代入: できない(定数なので、値を変更することができない)
  • 再宣言: できない(同じスコープ内で再宣言を試みるとエラー)
  • 巻き上げ: 巻き上げはされるが、letと同様に一時的死角(TDZ)があり、宣言前にアクセスするとエラー
  • グローバルオブジェクトへの追加: しない(constもグローバルスコープで宣言しても、グローバルオブジェクトには追加されない)
const y = 30;
y = 40;  // エラー:再代入できない

3. var

  • スコープ: 関数スコープ(関数内でのみ有効。関数外でvarを使うとグローバルスコープになる)
  • 再代入: 可能(letと同様に値を変更できる)
  • 再宣言: 可能(同じスコープ内で再宣言してもエラーにはならない)
  • 巻き上げ: 巻き上げが起き、変数は宣言されるが初期化されないため、宣言前にアクセスするとundefinedになる
  • グローバルオブジェクトへの追加: する(グローバルスコープでvarで宣言した場合、windowglobalオブジェクトにプロパティとして追加される)
var z = 50;
var z = 60;  // 再宣言が可能
console.log(z);  // 60

4. 「何もなし」(宣言なし)

  • スコープ: グローバルスコープ(関数やブロック内で宣言しない場合、変数は自動的にグローバルスコープに追加される)
  • 再代入: 可能(宣言せずに代入した場合も変数に値を設定できる)
  • 再宣言: できる(変数が既にグローバルスコープに存在していても、再宣言することができる)
  • 巻き上げ: なし(宣言しない場合、巻き上げは起きない)
  • グローバルオブジェクトへの追加: する(宣言しない場合、windowglobalオブジェクトに追加される)
x = 70;  // 宣言なしで代入
console.log(x);  // 70

比較まとめ

特性 let const var 何もなし(宣言なし)
スコープ ブロックスコープ ブロックスコープ 関数スコープ グローバルスコープ
再代入 可能 不可 可能 可能
再宣言 不可 不可 可能 可能
巻き上げ 一時的死角(TDZ) 一時的死角(TDZ) 初期化されず、undefinedになる なし
グローバルオブジェクト追加 しない しない する する

結論

  • letconst は、どちらもブロックスコープで、スコープ内での変数管理をより厳密に行いたい場合に使う。constは値が変更されない定数を宣言する場合に使う。
  • var は、古いコードや関数スコープで動作する必要がある場合に使わるが、現代のJavaScriptではletconstを使用することが推奨さる。
  • 変数を宣言しない場合(何もなし)は、グローバルスコープに変数が追加されてしまう。予期しないバグやセキュリティ問題を引き起こす可能性があるため、避けた方がよい。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?