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

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

まず、よくある質問は、ECMAScript と JavaScript の関係は何ですか?

ECMAScript は国際的に標準化されたスクリプト言語です。 JavaScript は、ECMAScript、DOM、BOM で構成されています。簡単に言えば、ECMAScript は JavaScript の言語仕様であり、JavaScript は ECMAScript の実装と拡張です。

2011 年に ECMAScript バージョン 5.1 がリリースされました。私たちのほとんどは以前は ES5 を使用していました。

2015年6月にECMAScript 6が正式に承認され、国際標準となりました。

1. ブロックスコープ {}

ES5 のスコープは、グローバル スコープと関数スコープです。ブロックスコープの概念はありません。

ブロックスコープは ES6 で追加されました。ブロックスコープは { } に含まれ、if 文と for 文内の { } もブロックスコープに属します。

<script type="text/javascript">
	
    {
        var a = 1;
        コンソールログ(a); // 1
    }
    コンソールログ(a); // 1
    // var で定義された変数はブロックスコープを越えてアクセスできます。
 
    (関数A() {
        var b = 2;
        コンソールログ(b); // 2
    })();
    // console.log(b); // エラー、
    // var で定義された変数は関数スコープを越えてアクセスできないことがわかります if(true) {
        var c = 3;
    }
    コンソール.log(c); // 3
    (var i = 0; i < 4; i++) {
        var d = 5;
    };
    console.log(i); // 4 (ループの終了時に i はすでに 4 なので、ここでも i は 4 です)
    コンソールログ(d); // 5
    // if 文および for 文内で var で定義された変数は外部からアクセスできます。
    // if 文と for 文は関数スコープではなくブロックスコープに属していることがわかります。
 
</スクリプト>

2. var、let、constの違い

  1. var によって定義された変数にはブロックの概念がなく、ブロック間でアクセスできますが、関数間ではアクセスできません。
  2. let によって定義された変数には、ブロックスコープ内でのみアクセスでき、ブロックや関数間でアクセスすることはできません。
  3. const は定数を定義するために使用されます。定数は使用時に初期化する (つまり、値を割り当てる) 必要があり、ブロック スコープ内でのみアクセスでき、変更することはできません。
<script type="text/javascript">
    // ブロックスコープ {
        var a = 1;
        b = 2 とします。
        定数 c = 3;
        // c = 4; // エラー var aa;
        bb とします。
        // const cc; // エラー console.log(a); // 1
        コンソールログ(b); // 2
        コンソール.log(c); // 3
        console.log(aa); // 未定義
        console.log(bb); // 未定義
    }
    コンソールログ(a); // 1
    // console.log(b); // エラー // console.log(c); // エラー // 関数スコープ (関数 A() {
        var d = 5;
        e = 6 とします。
        定数f = 7;
        コンソールログ(d); // 5
        コンソールログ(e); // 6  
        コンソールログ(f); // 7 
 
    })();
    // console.log(d); // エラー // console.log(e); // エラー // console.log(f); // エラー</script>

3. const で定義されたオブジェクトのプロパティは変更できますか?

これは今日面接中に遭遇した質問です。const は変更できないと書いてあったので、すぐに「いいえ」と答えました。しかし、実際にテストしてみると間違いであることがわかったので、ここに記録しておきます。

 定数人 = {
     名前: 'jiuke',
     性別:「男性」
 }
 
 person.name = 'テスト'
 
 console.log(人.名前)

上記のコードを実行すると、 person オブジェクトの name 属性が実際に変更されていることがわかります。何が起こっているのでしょうか?

オブジェクトは参照型であるため、オブジェクトへのポインタのみが直接格納されます。つまり、const はポインタが変更されないことのみを保証します。オブジェクトのプロパティを変更しても、オブジェクトのポインタは変更されないため、変更は許可されます。つまり、const で定義された参照型のポインタが変更されない限り、他の変更はすべて許可されます。

次に、ポインターを変更して新しいオブジェクトをポイントできるようにしようとすると、エラーが返されます。

定数人 = {
   名前: 'jiuke',
   性別:「男性」
}
 
人 = {
   名前: 'テスト',
   性別:「男性」
}

JavaScript es6 の var、let、const の違いに関する詳細なケース分析に関するこの記事はこれで終わりです。JavaScript es6 の var、let、const の違いについてさらに詳しく知りたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

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

<<:  Linux でのマルチスレッドおよびマルチプロセス クラッシュのシミュレーションに関する簡単な説明

>>:  MySQL の完全バックアップとクイックリカバリ方法

推薦する

CSS3で実装されたスライドメニュー

結果:実装コード: <!DOCTYPE html><html class=&quo...

VMware vSAN 入門概要

1. 背景1. vSphere の共有ストレージの背景を簡単に紹介するvSphere の重要な機能は...

MySQL でデータを削除してもテーブル ファイルのサイズが変更されないのはなぜですか?

長期間稼働しているデータベースの場合、テーブルがストレージ領域を占有しすぎるという問題がよく発生しま...

JavaScript parseInt() と Number() の違いのケーススタディ

学習目標: parseInt() と Number() という 2 つの関数は、文字列をデータ型に変...

Centos7 での MySQL 5.7.20 のインストールと設定に関する詳細なチュートリアル

1. 公式 Web サイトから MySQL 5.7 インストール パッケージ (mysql-5.7....

Vueは動的ルーティングの詳細を実装します

目次1. フロントエンド制御1. router.js ファイル内 (router.js にそれぞれ静...

Sublime TextがUbuntuで中国語を入力できない問題の最も簡単な解決策

崇高なSublime Text はコード エディター (Sublime Text2 は有料ソフトウェ...

MySQL トリガーの基本的な使い方(作成、表示、削除など)の詳細な説明

目次1. MySQLトリガーの作成: 1. MySQLトリガー作成構文: 2. MySQL作成構文の...

JavaScript はドラッグ可能なモーダルボックスを実装します

この記事では、ドラッグ可能なモーダルボックスを実装するためのJavaScriptの具体的なコードを参...

JS で美しい条件式を書く方法についての簡単な説明

目次複数の条件文複数属性オブジェクトスイッチステートメントを置き換えるデフォルトパラメータとデストラ...

Vue+canvas は、ウォーターフォール チャートを上から下までリアルタイムに更新する効果を実現します (QT と同様)

早速ですが、デモ画像をご紹介します。実装されている機能は、左側に凡例、右側にウォーターフォール チャ...

Mysql 文字列の傍受と指定された文字列内のデータの取得

序文: 正規表現のインターセプションに似た、MySql フィールドの文字列から特定の文字を抽出すると...

Linux スレッド間の同期と排他制御の知識ポイントのまとめ

スレッドが同時に実行される場合、スレッドがリソースを競合してデータの曖昧さが生じるのを防ぐために、重...

GZIP 圧縮 Tomcat と Web パフォーマンスの改善プロセス図

1. はじめに最近、あるプロジェクトに取り組んでいたのですが、サーバーからクライアントに返される J...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...