blog

ES6ラーニング・ノート I: letコマンドとconstコマンド

変数が宣言されたとき、初期値は未定義で、値が代入されずに使用され、変数の値は1です。 デフォルトでは const を使用し、変数の値を変更する必要がある場合は let を使用します。...

Jul 9, 2020 · 2 min. read
シェア

let変数の宣言

宣言されずに変数が使用されると、is not defined というエラーが報告されます。

変数が初期値undefinedで宣言され、値が代入されずに使用される場合、変数の値は:undefinedです。

var との違い

var 変数昇格を持つ ブロックレベルのスコープを持たない 繰り返し宣言可能 汚染するグローバル変数

let は変数の昇格を持ちません ブロックレベルのスコープを持ちます 繰り返し宣言できません グローバル変数を汚染しません

1.変数のリフティングはなく、ブロックレベルのスコープがあります。

 console.log(a); //undefined
 console.log(b); //エラー b が定義されていない 
 if (1 === 1) {
 var a = 1;
 let b = 10; //b {} 
 }
 console.log(b);//エラー b が定義されていない
上記のコードを一緒に実行すると、次のように表示される。

2.宣言の繰り返し

 		var a = 1;
 var a = 2;
 console.log(a); //2 後の宣言が前の宣言を上書きする。
 let b = 1;
 let b = 2;
 console.log(b); //エラー 識別子'b'はすでに宣言されている 
上記のコードが一緒に実行された場合、プログラムはエラーを報告し、aは出力されないが、一般的にvarとletは混在しない。

3.汚染されていないグローバル変数

		// let RegExp = 10;
 // console.log(RegExp); //10
 // console.log(window.RegExp); //ƒ RegExp() { [native code] }
 var RegExp = 10;
 console.log(RegExp); //10
 console.log(window.RegExp); //10

const定数の宣言

1.定数の宣言 一度宣言した定数は変更できない リテラルは変更できないが、オブジェクト内部の内容は変更可能。

letと同様、変数の昇格はありません。 ブロックレベルのスコープで、複数回宣言することはできません。 グローバル変数を汚染することもありません。

		const max = 20;
 // max = 30; //Assignment to constant variable. リテラルは変更できない
 const person = {
 name: "tanakasan"
 }
 person.name = "lisi"; 
 console.log(person); //{name: "lisi"} ただし、オブジェクトの中身を変更することは可能である。

letfor ループの応用

		var arr = []; 
 for (var i = 0; i < 10; i++) {
 arr[i] = function() {
 return i; //
 }
 } 
 console.log(arr); 
		console.log(arr[5]()); //10
//	ループの最後に、arrに10個の関数が格納されている。=10
// 関数の中身を見るには関数をプリントする:
// [[Scopes]]: Scopes[1]
// 0: Global {parent: Window, opener: null, top: Window, length: 0, frames: Window,  }
// グローバルスコープでのi=10
 const arr1 = []; //変数のリフティングはなく、ループするたびにブロックレベルのスコープが作成され、それぞれに個別の変数iが入り、最終的に関数が実行される。
 for (let i = 0; i < 10; i++) {
 arr1[i] = function() {
 return i;
 }
 }
 	console.log(arr1); 
		console.log(arr1[5]()); //5
//各関数には、ブロックレベルのスコープとグローバルスコープがある。=10,ブロック・レベル・スコープのiは、ループ本体と一緒に変化する。関数が実行されると、まずブロックレベル・スコープに値を取りに行く。
// 関数の中身を見るには関数をプリントする:
// [[Scopes]]: Scopes[2]
// 0: Block {i: 0}
// 1: Global {parent: Window, opener: null, top: Window, length: 0, frames: Window,  
 

letlet と const の使い分け

デフォルトでは const を使用し、変数の値を変更する必要がある場合は let を使用します。

Read next

JVMシリーズ:ヒープ内のJavaオブジェクトオブジェクトの構造を説明する

記事では、アドレスによって占有されるメモリ空間内のJavaクラスまたはJavaインスタンスを解決するために、この魔法のツールをJOLの使用を導入しました。 今日は、さらに一歩踏み込んで、記事では説明しきれなかった深い部分まで分析します。見てください。 ObjectがJavaのすべてのオブジェクトの祖父であるという事実は、誰もがよく知っているはずです。

Jul 9, 2020 · 5 min read