var、let、constの異同点を深く分析する。
一、letとvarの違い
1.変数の昇格については、var変数の昇格、letはできません。
1、同じ点:
A、変数はアップしません。
B、一時的なデッドゾーンは声明の位置の後でしか使えません。
C、繰り返し声明してはいけません。
2、異なる点:
let宣言の変数は変更できます。
constは読み取り専用の定数を宣言します。一旦宣言された時点で、定数の値は変更されず、宣言された場合は初期化されなければならない。
let a; //undefined
const b;//エラーを報告するときは、声明に値を付けなければなりません。
let a=1
a=2; //変更可能
const b=1
b=2; //エラーを出しました。値を変えられません。
//自分が気になるポイント
let a=null //a=null
a=undefined //a=undefined
a=2; //a=2
const a=null //a=null、constはnullとundefinedを定義することもできます。
const b=undefined //b=undefined
b=2; //エラーを出しました。値を変えられません。
本質:
constが実際に保証しているのは、変数が変更できないのではなく、変数が指しているメモリアドレスに保存されているデータを変更してはいけません。
A、5種類の基本データタイプ(Number、String、Boolean、Unidefined、Null):値は変数が指すメモリアドレスに保存されていて、定数と同じです。値を変えられません
B、複雑なデータタイプ(Object:配列、オブジェクト):このタイプの変数名はデータを指すのではなく、データの所在地を指すもので、constは変数名が指すアドレスだけが変わらず、変更先のデータが変わらないことを保証するものではないので、このアドレスの属性値を修正することができますが、アドレスの指向を変えることはできません。
以上は小编が皆さんに绍介したvar、let、constの异同点です。皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
1.変数の昇格については、var変数の昇格、letはできません。
// var
console.log(a); // undefined,
var a = 2;
console.log(a); //2
//
var a; // undefined
console.log(a); // undefined
a=2; //
console.log(a); //2
// let
console.log(a); // ReferenceError
let a = 2;
// a ,
// let undefined,
let a;
console.log(a);// undefined
2.一時的なデッドゾーン:ブロックレベルのスコープ内にletコマンドがあり、その宣言された変数は「バインディング」という領域について、外部の影響を受けないように重点内容である。つまり、あるコードブロックにはletコマンドがあり、外部に名称が同じ変数があっても、そのコードブロックの同じ変数は外部の変数と干渉しない。varはできません。以下の通りです。
//let
var a = 123;
if (true) {
let a="abc";
console.log(a); // abc
}
console.log(a); // 123, a a
//var
var a = 123;
if (true) {
var a="abc";
console.log(a); // abc
}
console.log(a); // abc,
つまり、コードブロック内では、letコマンドを使用して変数を宣言する前に、この変数は使用できません。これは文法的には「一時的なデッドゾーン」と呼ばれています。例は以下の通りです
var tmp=1;
if (true) {
// TDZ
tmp = 'abc'; // ReferenceError
console.log(tmp); // ReferenceError
let tmp; // TDZ
console.log(tmp); // undefined
tmp = 123;
console.log(tmp); // 123
}
console.log(tmp); //
3.let宣言バインディングコードブロック内で、同じ変数を繰り返し宣言できません。
//a
function sub() {
let a = 10;
var a = 1;
} // ,Identifier 'a' has already been declared
function sub() {
let a = 10;
let a = 1;
} //
function sub() {
let a = 10;
{let a = 1;} // ,
}
//var ,
function sub() {
var a = 10;
var a = 1;
}
4.forループのコードブロックのように、letはコードブロック内部でのみ有効であり、varはコードブロックの外部でも有効である。
//let
for (let i = 0; i < 10; i++) {}
console.log(i); // ReferenceError: i is not defined
//var
for (let i = 0; i < 10; i++) {}
console.log(i); //101
let for : , 。
//
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 6
//
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
let i=3; //
console.log(i);
};
}
a[6](); // 3 ,
二、letとconst1、同じ点:
A、変数はアップしません。
B、一時的なデッドゾーンは声明の位置の後でしか使えません。
C、繰り返し声明してはいけません。
2、異なる点:
let宣言の変数は変更できます。
constは読み取り専用の定数を宣言します。一旦宣言された時点で、定数の値は変更されず、宣言された場合は初期化されなければならない。
let a; //undefined
const b;//エラーを報告するときは、声明に値を付けなければなりません。
let a=1
a=2; //変更可能
const b=1
b=2; //エラーを出しました。値を変えられません。
//自分が気になるポイント
let a=null //a=null
a=undefined //a=undefined
a=2; //a=2
const a=null //a=null、constはnullとundefinedを定義することもできます。
const b=undefined //b=undefined
b=2; //エラーを出しました。値を変えられません。
本質:
constが実際に保証しているのは、変数が変更できないのではなく、変数が指しているメモリアドレスに保存されているデータを変更してはいけません。
A、5種類の基本データタイプ(Number、String、Boolean、Unidefined、Null):値は変数が指すメモリアドレスに保存されていて、定数と同じです。値を変えられません
B、複雑なデータタイプ(Object:配列、オブジェクト):このタイプの変数名はデータを指すのではなく、データの所在地を指すもので、constは変数名が指すアドレスだけが変わらず、変更先のデータが変わらないことを保証するものではないので、このアドレスの属性値を修正することができますが、アドレスの指向を変えることはできません。
const a=[];
a.push("Hello"); // ,
a.length=0; // ,
a=["Tom"]; // ,
const b ={};
b.prop=123; // b ,
b.prop //123
b={}; // b ,
, Object.freeze 。
const b=Object.freeze({});
// , ,b.prop undefined
// ,
b.prop = 123;
締め括りをつける以上は小编が皆さんに绍介したvar、let、constの异同点です。皆さんに助けてほしいです。もし何か疑问がありましたら、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。