JavaScript中var、let、const區別?

來源:互聯網
上載者:User

標籤:gpo   計算   現象   bug   語句   修改   狀態   初始化   log   

 

簡單來說是: let是修複了var的範圍的一些bug,變的更加好用。let是更好的var。var的範圍是函數範圍由var定義的變數,它範圍在一個函數體內,而不是我們其他語言理解的大括弧{ }內。而let是塊層級(大括弧括起來的內容)

const聲明的變數只可以在聲明時賦值,不可隨意修改,這是最大的特點。

使用var聲明的變數,其範圍為該語句所在的函數內,且存在變數提升現象;

使用let聲明的變數,其範圍為該語句所在的代碼塊內,不存在變數提升;

使用const聲明的是常量,在後面出現的代碼中不能再修改該常量的值。

var a = [];

    for (let i = 0; i < 10; i++) {

      a[i] = function () {

        console.log(i);

      };

    }

    a[6](); //6

console.log(a[6]); //  function(){console.log(i)}

 

既然迴圈結束後,數組a的每一項都是function(){console.log(i)},那麼a[6]()輸出是6是怎麼實現的?難道let儲存了10個狀態?

這是因為 JavaScript 引擎內部會記住上一輪迴圈的值,初始化本輪的變數i時,就在上一輪迴圈的基礎上進行計算。

var a = [];for (var i = 0; i < 10; i++) {

  a[i] = function () {

    console.log(i);

  };}

a[6](); // 10

上面代碼中,變數i是var命令聲明的,在全域範圍內都有效,所以全域只有一個變數i。每一次迴圈,變數i的值都會發生改變,而迴圈內被賦給數組a的函數內部的console.log(i),裡面的i指向的就是全域的i。也就是說,所有數組a的成員裡面的i,指向的都是同一個i,導致運行時輸出的是最後一輪的i的值,也就是 10。

也就是,迴圈結束後,數組a的每一項都是function(){console.log(i)}。在執行a[6]函數前,此時i的值已經是10了。

JavaScript中var、let、const區別?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.