1、let和const命令

1、let命令

基本用法

用來聲明變量,類似于var,但是所聲明的變量只在let命令所在的代碼塊內(nèi)有效。
for循環(huán)中適合使用let:

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6]();//6,如果用var聲明i,輸出會(huì)是10。

不存在變量提升

let命令不會(huì)提升聲明,即先使用后聲明不會(huì)返回undefined,會(huì)直接報(bào)錯(cuò)。

// var 的情況
console.log(a); // 輸出undefined
var a= 2;

// let 的情況
console.log(a); // 報(bào)錯(cuò)
let a= 2;

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

當(dāng)前作用域存在let命令時(shí),其聲明的變量將綁定這個(gè)區(qū)域,不受外部影響,即必須要在聲明之后,才能使用此變量,即使它在外部已聲明過。
任何在聲明語句執(zhí)行結(jié)束前的使用都會(huì)報(bào)錯(cuò),包括typeof檢測(cè)。
其本質(zhì)是:只要進(jìn)入當(dāng)前作用域,所有變量就已存在,但不可獲取,只有當(dāng)聲明變量那行代碼執(zhí)行完畢,才可獲取和使用。

a=1; // 報(bào)錯(cuò)
let a;

typeof a; // 報(bào)錯(cuò)
let a; //如果使用的是var,上一行代碼會(huì)返回undefined

不允許重復(fù)聲明

let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量。

// 報(bào)錯(cuò)
function () {
  let a = 10;
  var a = 1;
}

// 報(bào)錯(cuò)
function () {
  let a = 10;
  let a = 1;
}

2、塊級(jí)作用域

ES6 的塊級(jí)作用域

let實(shí)際上為JavaScript新增了塊級(jí)作用域

function fun() {
  let a = 5;
  if (true) {
    let a = 10;
  }
  console.log(a); // 5
}

塊級(jí)作用域的出現(xiàn),讓立即執(zhí)行行數(shù)表達(dá)式可以簡(jiǎn)化:

(function () {
  var a = ...;
  ...
}());

//簡(jiǎn)化為:

{
  let a = ...;
  ...
}

塊級(jí)作用域與函數(shù)聲明

在塊級(jí)作用域內(nèi),應(yīng)盡量避免聲明函數(shù),若必須聲明,則應(yīng)該寫成行數(shù)表達(dá)式,而不是函數(shù)聲明,因?yàn)楹瘮?shù)聲明會(huì)被提升到塊級(jí)作用域的頭部。

(function () {
  if (false) {
    function f() { console.log('I am inside!'); }
  }
  f();
}());

//因?yàn)楹瘮?shù)聲明提升,上述代碼在ES6中實(shí)際相當(dāng)于:

(function () {
  var f = undefined;
  if (false) {
    function f() { console.log('I am inside!'); }
  }
  f();//此時(shí)f不是一個(gè)函數(shù),會(huì)報(bào)錯(cuò)。
}());

3、const命令

基本用法

const命令聲明的是一個(gè)常量,一旦聲明,就不允許改變。
所以聲明時(shí)必須初始化,只聲明不賦值的const命令會(huì)報(bào)錯(cuò)。
const聲明與let相似:

  1. 不提升變量。
  2. 存在暫時(shí)性死區(qū)。
  3. 只在聲明后使用。
  4. 只在塊級(jí)作用域內(nèi)有效。
  5. 不可重復(fù)聲明。

const命令聲明對(duì)象時(shí),此對(duì)象的屬性的值依然可改變,對(duì)象本身不可改為新對(duì)象,聲明數(shù)組時(shí)同理。

const obj= {};
// 為 obj 添加一個(gè)屬性,可以成功
obj.pro = 123;
obj.pro // 123
// 將 obj 指向另一個(gè)對(duì)象,就會(huì)報(bào)錯(cuò)
obj= {};

const a = [];
a.push('Hello'); // 可執(zhí)行
a.length = 0;    // 可執(zhí)行
a = ['world']; // 報(bào)錯(cuò) 

4、頂層對(duì)象的屬性

瀏覽器環(huán)境下頂層對(duì)象是指window對(duì)象。
var、function聲明的全局變量是window對(duì)象的屬性,let、const、class聲明的變量則不是。

最后編輯于
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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