天天看點

ES6回顧之let、var、const差別

文章内容

          • 1、let、var、const差別
          • 2、關于ES6
          • 3、ES6 聲明變量的六種方法
1、let、var、const差別

var

指令聲明的,在全局範圍内都有效
  • var

    指令會發生“變量提升”現象,即變量可以在聲明之前使用,值為undefined
  • let

    聲明的變量隻在它所在的代碼塊有效
  • let

    指令它所聲明的變量一定要在聲明後使用,否則報錯。在代碼塊内,使用let指令聲明變量之前,該變量都是不可用的。這在文法上,稱為“暫時性死區”
  • 隻要塊級作用域記憶體在

    let

    指令,它所聲明的變量就“綁定”(binding)這個區域,形成了封閉作用域不再受外部的影響。
  • let

    不允許在相同作用域内,重複聲明同一個變量。
應該避免在塊級作用域内聲明函數。如果确實需要,也應該寫成函數表達式,而不是函數聲明語句。
// ES5 環境
function f() { console.log('I am outside!'); }

(function () {
  function f() { console.log('I am inside!'); }
  if (false) {
  }
  f();
}());
           
上面代碼在 ES5 中運作,會得到“I am inside!”,因為在if内聲明的函數f會被提升到函數頭部,實際運作的代碼如下。
// ES5 環境
function f() { console.log('I am outside!'); }

(function () {
  function f() { console.log('I am inside!'); }
  if (false) {
  }
  f();
}());
           
// 浏覽器的 ES6 環境
function f() { console.log('I am outside!'); }

(function () {
  if (false) {
    // 重複聲明一次函數f
    function f() { console.log('I am inside!'); }
  }

  f();
}());
// Uncaught TypeError: f is not a function
           
2、關于ES6
  • 允許在塊級作用域内聲明函數。
  • 函數聲明類似于var,即會提升到全局作用域或函數作用域的頭部。
  • 同時,函數聲明還會提升到所在的塊級作用域的頭部。

const

聲明一個隻讀的常量

const

聲明的變量不得改變值,這意味着,

const

一旦聲明變量,就必須立即初始化,不能留到以後指派。

const

的作用域與

let

指令相同:隻在聲明所在的塊級作用域内有效。

const

指令聲明的常量也是不提升,同樣存在暫時性死區,隻能在聲明的位置後面使用。

const

聲明的常量,也與let一樣不可重複聲明。
3、ES6 聲明變量的六種方法
ES5兩種:

var

指令和

function

指令。ES6 除了添加

let

const

指令,還有兩種聲明變量的方法:

import

指令和

class

指令。