知っておくべきES6シリーズ変数宣言

ES6シリーズ変数宣言

ES6シリーズ

ES6シリーズ変数の分解の割り当て

変数を宣言させ、constは定数を宣言する

varとletとconstの違いです。
スコープ
letとconstはブロックレベルのスコープで、中かっこ全体で
のみ表示されます。Varにはグローバルスコープと関数スコープしかあり
ませんなぜブロックレベルスコープにする必要があるのですか?
1.内部変数は外部変数をカバーする場合があります。
2.カウントに使用されるループ変数がグローバル変数としてリークされます。
従来の非同期+ varインタビューの質問

for (var i = 0; i < 5; i++) {
    
    
	setTimeout(function(){
    
    
		console.log(i)	// 5,5,5,5,5
	},1000)
}
console.log(i) // 5
for (let i = 0; i < 5; i++) {
    
    
	setTimeout(function(){
    
    
		console.log(i) // 0,1,2,3,4
	},1000)
}
console.log(i) // undefined

2.変数プロモーション
varには変数プロモーションがあり、デフォルト値undefinedは宣言されていません

letconst未声明会提示ReferenceError
console.log(a)  //undefined
var a = 1
console.log(a)//Uncaught ReferenceError: a is not defined
let a = 1

3.
varの繰り返し宣言は
letの繰り返し宣言を許可し、constは同じスコープ内での繰り返し宣言許可しません

let a
let a//Uncaught SyntaxError: Identifier 'a' has already been declared

4.
グローバルオブジェクト属性のletおよびconstによって宣言されたグローバル変数は、グローバルオブジェクトの属性ではありません

let a = 0
console.log(this.a)  //undefiend

一時的なデッドゾーン
ブロックレベルのスコープにletコマンドがある限り、宣言する変数はこのゾーンに「バインド」され、外部の影響を受けなくなります。

var tmp = 123;
if (true) {
    
    
	tmp = 'abc'	//ReferenceError
	let tmp
}

変数xはletコマンドを使用して宣言されていますが、宣言の前にtypeofを実行するとReferenceErrorがスロー
されます変数がまったく宣言されていない場合、typeofを使用してもエラーは報告されません。
constは定数を定義します
//次の内容はRuan Yifeng先生からの引用「ECMAScript 6の紹介」

constが実際に保証するのは、変数の値を変更できないことではなく、変数が指すメモリアドレスに格納されているデータを変更できないことです。単純なタイプのデータ(数値、文字列、ブール値)の場合、値は変数が指すメモリアドレスに格納されるため、定数と同等です。ただし、複合データ(主にオブジェクトと配列)の場合、変数が指すメモリアドレスは、実際のデータへのポインタにすぎません。constは、ポインタが固定されている(つまり、常に別の固定アドレスを指している)ことのみを保証できます。 、それが指すデータ構造が可変であるかどうかに関しては、それは完全に制御不可能です。
オブジェクトを本当にフリーズしたい場合は、Object.freezeメソッドを使用する必要があります。

ここに画像の説明を挿入
上記のコードでは、定数fooはフリーズされたオブジェクトを指しているため、新しい属性の追加は機能せず、厳密モードではエラーが報告されます。
オブジェクト自体をフリーズすることに加えて、オブジェクトのプロパティもフリーズする必要があります。以下は、オブジェクトを完全にフリーズする関数です。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_48193717/article/details/108350502