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 明確規定,如果區塊中存在
let
和const
命令,這個區塊對這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。總之,在代碼塊內,使用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實際上保證的,並不是值不能改變,而是指向的那個內存地址不能改變