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

以上が、スレッドを実装するために知っておかなければならないいくつかの方法である。

最近、Javaのスレッド関連の実装を見てきましたが、メモとして、後で見やすいようにスレッドの実装を少しまとめておきます。 Threadクラスを継承し、そのrunメソッドをオーバーライドします。 Callableインターフェイスを実装し、そのcall()メソッドを実装します。 を取る ...

Apr 15, 2020 · 7 min read