ES6 中的let和const

let聲明的變量只在let命令所在的代碼塊內(nèi)有效。
const聲明一個(gè)只讀的常量,一旦聲明,常量的值就不能改變。

let命令

用法:

{
 let a=0;
a    // 0
}
a     //會(huì)報(bào)錯(cuò) refenceError:a is not defined

代碼塊內(nèi)有效
let是在代碼塊內(nèi)有效,var是在全局范圍內(nèi)有效:

{
 let a=0;
 var b =1;
}
a    // referenceError: a is not defined
b     //1

不能重復(fù)聲明
let只能聲明一次 var 可以聲明多次:

let a =1;
let a =2;
var b =3;
var b=4;
a     // identifier  'a' has already been declared 
b     //4
for  循環(huán)計(jì)數(shù)器很適合用let
for(var i=0; i<10;i++) {
setTimeout(function(){
   console.log(i);
})
}
         //輸出十個(gè) 10
for (let j =0;jc10; j++){
 setTimeout(function(){
console.log(j);
})
}

//輸出12345

變量 i 是用 var 聲明的,在全局范圍內(nèi)有效,所以全局中只有一個(gè)變量 i, 每次循環(huán)時(shí),setTimeout 定時(shí)器里面的 i 指的是全局變量 i ,而循環(huán)里的十個(gè) setTimeout 是在循環(huán)結(jié)束后才執(zhí)行,所以此時(shí)的 i 都是 10。

變量 j 是用 let 聲明的,當(dāng)前的 i 只在本輪循環(huán)中有效,每次循環(huán)的 j 其實(shí)都是一個(gè)新的變量,所以 setTimeout 定時(shí)器里面的 j 其實(shí)是不同的變量,即最后輸出12345。

不存在變量提升
let不存在變量提升,var會(huì)變量提升:

console.log(a);         //ReferenceError: a is not defined
let a = "apple";
 
console.log(b);          //undefined
var b = "banana";

變量 b 用 var 聲明存在變量提升,所以當(dāng)腳本開始運(yùn)行的時(shí)候,b 已經(jīng)存在了,但是還沒有賦值,所以會(huì)輸出 undefined。

變量 a 用 let 聲明不存在變量提升,在聲明變量 a 之前,a 不存在,所以會(huì)報(bào)錯(cuò)。

const命令
const聲明一個(gè)只讀變量,聲明之后不允許改變。意味著,一但聲明必須初始化,否則會(huì)報(bào)錯(cuò)。
用法:

const PI="3.1415926";
PI     //3.1415926

const  my_age;   // syntaxError:missing initializer in const declaration

暫時(shí)性死區(qū):

var PI = "a";
if(true){
  console.log(PI);       // ReferenceError: PI is not defined
  const PI = "3.1415926";
}

ES6 明確規(guī)定,代碼塊內(nèi)如果存在 let 或者 const,代碼塊會(huì)對(duì)這些命令聲明的變量從塊的開始就形成一個(gè)封閉作用域。代碼塊內(nèi),在聲明變量 PI 之前使用它會(huì)報(bào)錯(cuò)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容