JavaScript における var、let、const の違いの詳細な説明

JavaScript における var、let、const の違いの詳細な説明

JavaScriptで変数を宣言する方法としては、 varletconstがあります。 letconst es6で追加された新しいコマンドです。では、それらの違いは何でしょうか?

まずは、3つの違いについて全体的に見ていきましょう。詳しく紹介する前に、var、let、constの違いを主に以下の点から分析します。

  • グローバル変数として使用した場合の違い
  • 可変巻上げ
  • 一時的なデッドゾーン
  • ブロックスコープ
  • 重複したステートメント
  • 宣言された変数を変更する

グローバル変数として

ES5では、トップレベルオブジェクトのプロパティはグローバル変数と同等です。var var宣言された変数は、グローバル変数であると同時にトップレベル変数のプロパティでもあります。

ただし、 ES6letで宣言された変数はグローバルにアクセス可能ですが、トップレベル変数のプロパティとしてはアクセスできません。また、 constで宣言された定数もトップレベル変数では使用できません。

画像の説明を追加してください

可変ホイスト

varで宣言された変数は昇格され、宣言される前に変数を呼び出すことができ、値は未定義です。

letconstには変数の昇格はありません。つまり、宣言した変数は宣言後に使用する必要があります。そうでない場合はエラーが報告されます。

 console.log(a) // undefinedvar a = 1console.log(b) // 初期化前に 'b' にアクセスできませんlet b = 2console.log(c) // 初期化前に 'c' にアクセスできませんconst c = 3console.log(a) // undefined
変数a = 1

console.log(b) // 初期化前に 'b' にアクセスできません
b = 2とする

console.log(c) // 初期化前に 'c' にアクセスできません
定数c = 3

一時的なデッドゾーン

var一時的なデッドゾーンはありません

letconstには一時的なデッドゾーンがあります。変数は、変数を宣言するコード行が実行された後にのみ取得および使用できます。

実は、これは前回の変数改善から拡張された差です。 varで宣言された変数は昇格されるため、宣言前に変数値がundefinedであってもエラーは報告されず、一時的なデッドゾーンは発生しません。スコープの開始前または開始後、変数または定数が宣言される前にletまたはconstを使用すると、エラーが報告されます。この領域は一時的なデッド ゾーンとも呼ばれます。

同上:

 console.log(a) // 未定義
変数a = 1

console.log(b) // 初期化前に 'b' にアクセスできません
b = 2とする

console.log(c) // 初期化前に 'c' にアクセスできません
定数c = 3

ブロックスコープ

varブロックスコープ内に存在しません

letconstはブロックスコープを持つ

{ var a = 2}console.log(a) // 2{ let b = 2}console.log(b) // キャッチされない ReferenceError: b は定義されていません{ const c = 2}console.log(c) // キャッチされない ReferenceError: c は定義されていません

重複したステートメント

var同じスコープ内で繰り返し宣言することができ、後で宣言された変数は前の変数宣言を上書きします。

letconst同じスコープ内で繰り返し宣言することはできません

変数a = 10
var a = 20 // 20

b = 10とする
let b = 20 // 識別子 'b' はすでに宣言されています

定数c = 10
const c = 20 // 識別子 'c' はすでに宣言されています

宣言された変数(定数と変数宣言)を変更する

varlet変数を宣言し、宣言された変数は変更できる。

const読み取り専用の定数を宣言します。一度宣言すると、定数の値は変更できません。ただし、参照データ型の場合、 JavaScriptの変数または定数はデータの保存アドレスを格納することに注意してください。定数の参照が直接変更されない限り、定数が指すオブジェクトのプロパティを変更することは可能です。

変数a = 10
= 20 です
コンソールログ(a) // 20

b = 10とする
20 です
コンソール.log(b) // 20

定数c = 10
c = 20 // キャッチされない TypeError: 定数変数への代入

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScriptのvar let constの違いは何ですか?
  • JavaScript es6 における var、let、const の違いの詳細な説明
  • JavaScript の var と ES6 仕様の let と const の違いと使い方を詳しく解説
  • JavaScript の let、var、const キーワードの違いを理解する
  • JavaScript ES6 構文における let、const、var の違い

<<:  CSS3で作られたレインボーボタンスタイル

>>:  ウェブサイトのフロントエンドパフォーマンスの最適化: JavaScript と CSS

推薦する

Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

目次問題の説明:解決策1解決策2問題の説明:ページ A と B の 2 つがあり、各ページにはget...

ウェブデザインと制作の一般的な原則をまとめる

<br />関連記事: Web コンテンツ ページ作成に関する 9 つの実用的な提案、W...

変数が空かどうかを判定するシェルの方法の概要

シェルで変数が空かどうかを判断する方法シェルプログラミングでは、パラメータのエラーチェック項目に、変...

MySQLの整数および文字列インデックスの無効化または暗黙的な変換に関する簡単な説明

目次問題の概要問題の再現問題の拡大結論は問題の概要今日、仕事中に、DBA が突然、SQL に暗黙的な...

レンダリング関数と JSX の詳細

目次1. 基本2. ノード、ツリー、仮想DOM 1. 仮想DOM 3. createElementパ...

HTML でのメタタグと使用法の詳細な説明

これ以上無駄話をして時間を無駄にしないので、今日の話題を始めましょう。 HTML のメタタグ1. メ...

MySQL複合インデックスの詳細な研究

複合インデックス (結合インデックスとも呼ばれます) は、複数の列に対して作成されるインデックスです...

MySQL 5.7.11 zip インストールと設定方法のグラフィックチュートリアル

1. MySQL 5.7.11 zipインストールパッケージをダウンロードするこのマシンはwin7 ...

MySQLのさまざまなロックの概念的理解

楽観的ロック楽観的ロックは、主にデータ バージョン記録メカニズムに基づいて実装され、通常はデータベー...

Apache ソースコードのインストールと仮想ホストの設定に関する詳細なチュートリアル

ソースからApacheをインストールする1. Apacheソースコードをアップロードして必要なソフト...

Grafana+Prometheus を使用して MySQL サービスのパフォーマンスを監視する

Prometheus (プロメテウスとも呼ばれる) 公式サイト: https://prometheu...

MySQL の nvl() 関数に似た ifnull() 関数についての簡単な説明

IFNULL(式1,式2) expr1 が NULL でない場合、IFNULL() は expr1 ...

Vue の新しいおもちゃ VueUse の具体的な使い方

目次序文VueUseとは使いやすいおなじみの手ぶれ補正やスロットル機能もありますグローバル状態を共有...

Gitlab実践チュートリアルでは、関連する設定操作にgit configを使用します。

この記事では、実際に発生した問題をもとに、git の設定に関する内容を紹介します。コマンド: git...

HTMLテキストの一般的なイベントとメソッドの詳細な説明

イベントの説明onactivate: オブジェクトがアクティブ要素として設定されたときに発生します。...