iT邦幫忙

0

雜七雜八廣記系列 第十回 : var 、 let 、const

  • 分享至 

  • xImage
  •  

哈瞜大家好 我是阿華,今天來跟大家聊聊var 、 let 、const 三種宣告變數的差別

var 、 let 、const 三種宣告變數的差別

let 和 const主要解決了var三個問題,分別是沒有塊級作用域、重複宣告、變數提升,下面我們接著看:

作用域(Scope)區別:

在 ES6 以前 宣告變數是用 var,而它宣告的變數存在於函數作用域或全局作用域中。而 let 和 const 是在 ES6 中引入的,它們引入了塊級作用域的概念,變數存在於它們被宣告的塊(例如花括號 {})內部。

重複宣告:

使用 var 可以重複宣告同一個變數後面宣告會覆蓋掉前面的,而 let 和 const 不允許在同一作用域內重複宣告相同的變數名。

變數提升:

var 有變數提升的特性,即無論在哪裡宣告變數,它都會被提升至所在作用域的頂部,使得在宣告之前就可以使用該變數。
而 let 和 const 不具有變數提升,試圖在變數宣告之前訪問變數會產生暫時性死區(Temporal Dead Zone,TDZ)錯誤。

其他不同的點:

可變性:

let 宣告的變數是可變數,可以重新賦值。而 const 宣告的變數是常數,一旦賦值就不能再更改。

在 Window Object 中

使用 var 會在 Window Object 找得到,而 let 和 const 找不到。

適用場景:

在實際應用中,推薦使用 const,除非需要重新賦值,才考慮使用 let;而避免使用 var,因為它存在一些潛在的問題,比如變數提升、作用域與同一名稱變數被覆蓋的問題。

最後我們來看一個經典的例子:

// 綜合 IIFE 閉包 作用域
for (var i = 1; i <= 5; i++) {
  setTimeout(function () {
    console.log(i);
  }, 0);
}

上面例子會打印5個5,要如何讓他依序打印1-5呢?

第一種方法是使用let去宣告變數i,讓它作用於它的塊級作用域

for (let i = 1; i <= 5; i++) {
  setTimeout(function () {
    console.log(i);
  }, 0);
}

第二種方法,是透過IIFE去給函數作用域並執行,讓用var宣告的i作用於函數作用域

for (var i = 1; i <= 5; i++) {
  (function (i) {
    //相當於閉包
    setTimeout(function () {
      console.log(i);
    }, i * 1000);
  })(i);
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言