blog

var、let、constの違い

ES6の登場により、varは変数を定義する唯一の方法ではなくなりました。まず第一に、varを使った変数定義にはこのようなバグがあります: 1. jsにはブロックレベルのスコープがなく、js関数内でva...

Apr 15, 2020 · 2 min. read
シェア

ES6の登場により、varは変数を定義する唯一の方法ではなくなりました。

I. 最初にvarで変数を定義すると、このようなバグがあります:

1.jsにはブロックレベルのスコープがありません。変数はjs関数内でvarで定義され、そのスコープは関数本体全体です

for (var i = 0; i < 10; i++) { var a = 1;}console.log(a)

forループの内部で定義された変数は、forループの外部でも使用できます。

2.ループ内での変数の過剰共有

for (var i = 0; i < 3; i++) { setTimeout(function () { console.log(i) }, 1000)}

上記のforループ、出力はどうなると思いますか?出力はthree 3です。ループ自身と3つのタイムアウトコールバックはすべて一意な変数iを共有しています。

II.let、素晴らしい!

1.**letを使って宣言された変数はブロックレベルのスコープを持ちます。**letを使用して宣言された変数は、外側の関数全体ではなく、外側のブロックにスコープされます。let宣言はまだリフティング機能を保持していますが、やみくもにリフティングされることはありません。

2.** let で宣言されたグローバル変数は、グローバルオブジェクトのプロパティではありません。**let で定義された変数は、window.変数名ではアクセスできません。

3.** for(let i...)のようなループのようなループでは、繰り返しのたびに i に対する新しいバインディングが作成されます。** var の 2 番目の例のように、ループが複数回実行され、ループがすべてクロージャを維持する場合、var で定義された変数の場合のように、すべてのクロージャがループ変数に同じ値を取得するのではなく、それぞれのクロージャがループ変数に異なる値を取得します。

III.cosnt、定数の宣言!

ES6では、const宣言は参照を指すという点で、ポインタに似ています:

{ const ARR = [5, 6]; //var ARR = [5,6] ARR.push(7); console.log(ARR); // [5,6,7] ARR = 10; // TypeError varで変数を定義すれば、ARRに値を代入することができる。.log(ARR)}

constで定義された配列は、配列にデータを追加する操作はできますが、変数に値を再代入することはできません。constは値を代入せずに宣言することはできず、constを使用する場合は大文字の変数を使用してください!

Read next

プログラミング言語の基礎

高級言語:人間の論理的思考の観点からあらゆるタイプのアプリケーションに対応するプログラミング言語で、抽象度がはるかに高く、実行する特定のマシン上でターゲットコードを呼び出すためのコンパイルが必要。このタイプの言語は、人間が使用する自然言語に近いため、プログラミングの効率が大幅に向上します。中間コードを、特定のマシン上で絶対コードまたは再配置可能な命令コードまたはアセンブリ命令コードに変換することです。コンパイルの最終段階。

Apr 14, 2020 · 6 min read