var和let,const區別總結

var和let,const區別

一.var

1.var屬於ES5規範

2.預解析

var有預解析階段,會被js解析器掃描,然後放進倉庫,等待逐行代碼的執行,此時var聲明的變量初始值是undefined

3.聲明提升

var會存在聲明提升,當js解析器掃描到var關鍵字後,會將var聲明的變量放進當前作用域的頂部

4 作用域

全局作用域或者函數作用域.

5.掛載對象

var 聲明的全局變量會掛載到window對象上

二.let

1.let屬於ES6規範

2.let只在塊級作用域有效

一般一個大括號就是一個塊

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

for (let v = 0; v < 10; v++) {
    console.log(v);
}
alert(v);

if(true) let a = 20; //會報錯

if(true) 
{
   let a = 20; //不會報錯
}

3.let聲明變量不會提升

let聲明的變量一定要在聲明之後使用,否則報錯。

alert(a); 
var a = 2;

alert(b); 
let b = 2;
//注意:let聲明的變量一定要在聲明之後使用,否則報錯。

4.不能通過let聲明和形參相同的變量

function test(a) {
    let a = 123;
    console.log(a);
}
test(456);

5.暫時性死區

ES6 明確規定,如果區塊中存在letconst命令,這個區塊對這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。總之,在代碼塊內,使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱爲“暫時性死區”(temporal dead zone,簡稱 TDZ)。

在暫時性死區中使用let或const聲明的變量,會報錯

6.let聲明全局變量

let聲明的全局變量,不會成爲window的屬性,並沒有掛載到window對象上

三.const

1.屬於ES6規範

2.聲明只讀常量

const常量一旦聲明,常量將不能重新賦值!

3.必須初始化

const一旦聲明,就必須立即初始化,不能留到以後賦值!

4.const本質

常量一旦聲明,常量將不能重新賦值!

3.必須初始化

const一旦聲明,就必須立即初始化,不能留到以後賦值!

4.const本質

const實際上保證的,並不是值不能改變,而是指向的那個內存地址不能改變

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章