10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お前らはjsのvarとletの違いを分かってない

Last updated at Posted at 2023-05-02

JavaScriptのvarとletは、変数を宣言するためのキーワードですが、いくつかの重要な違いがあります。

スコープ

varは関数スコープを持ちます。これは、varで宣言された変数が関数内でアクセス可能であることを意味します。一方、letはブロックスコープを持ち、letで宣言された変数はそのブロック内でのみアクセス可能です。

function testVar() {
  if (true) {
    var x = 10;
  }
  console.log(x); // 10
}

function testLet() {
  if (true) {
    let y = 20;
  }
  console.log(y); // ReferenceError: y is not defined
}

ホイスティング

varで宣言された変数は、関数またはグローバルスコープの先頭に巻き上げられます。これは、変数が宣言される前に参照できることを意味します。ただし、その時点では未定義として扱われます。letで宣言された変数も巻き上げられますが、初期化前にアクセスしようとするとReferenceErrorが発生します。

console.log(a); // undefined
var a = 10;

console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 20;

再宣言

同じスコープ内で、varを使用して既存の変数を再宣言することができますが、letでは再宣言が許されません。

var c = 30;
var c = 40; // No error

let d = 50;
let d = 60; // SyntaxError: Identifier 'd' has already been declared

グローバルオブジェクト

varで宣言されたグローバル変数は、グローバルオブジェクト(ブラウザではwindowオブジェクト)のプロパティとなります。letで宣言されたグローバル変数は、グローバルオブジェクトのプロパティにはなりません。

var e = 70;
console.log(window.e); // 70 (in a browser environment)

let f = 80;
console.log(window.f); // undefined (in a browser environment)

これらの違いを理解し、適切な変数宣言キーワードを選択することが重要です。一般的には、letやconstを使用してブロックスコープを活用することが推奨されています

最後に

この内容はchat gpt(4)に聞いたものをそのままコピペして作成しました。
スクリーンショット 2023-05-02 15.42.05.png

10
4
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
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?