es6讀書筆記(一)——let

来源:http://www.cnblogs.com/tblj/archive/2017/05/28/6916207.html
-Advertisement-
Play Games

摘自阮一峰的es6教程 http://es6.ruanyifeng.com/#docs/let ...


文章內容摘自阮一峰的 ECMAScript 6 入門

ES6新增了let命令,用來聲明變數。它的用法類似於var,但是所聲明的變數,

  • 只在let命令所在的代碼塊內有效,並且不存在變數提升(也叫預解釋)。
{
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

  上面代碼在代碼塊之中,分別用letvar聲明瞭兩個變數。然後在代碼塊之外調用這兩個變數,結果let聲明的變數報錯,var聲明的變數返回了正確的值。這表明,let聲明的變數只在它所在的代碼塊有效。

for迴圈的計數器,就很合適使用let命令。

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

  上面代碼中,變數ilet聲明的,當前的i只在本輪迴圈有效,所以每一次迴圈的i其實都是一個新的變數,所以最後輸出的是6。你可能會問,如果每一輪迴圈的變數i都是重新聲明的,那它怎麼知道上一輪迴圈的值,從而計算出本輪迴圈的值?這是因為 JavaScript 引擎內部會記住上一輪迴圈的值,初始化本輪的變數i時,就在上一輪迴圈的基礎上進行計另外,for迴圈還有一個特別之處,就是迴圈語句部分是一個父作用域,而迴圈體內部是一個單獨的子作用域。

 

for (let i = 0; i < 3; i++) {
  let i = 'abc';
  console.log(i);
}
// abc
// abc
// abc

 

上面代碼輸出了3次abc,這表明函數內部的變數i和外部的變數i是分離的。

  • 暫時性死區 
    只要塊級作用域記憶體在let命令,它所聲明的變數就“綁定”(binding)這個區域,不再受外部的影響
    var tmp = 123;
    
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;
    }
    View Code

    上面代碼中,存在全局變數tmp,但是塊級作用域內let又聲明瞭一個局部變數tmp,導致後者綁定這個塊級作用域,所以在let聲明變數前,對tmp賦值會報錯
    ES6明確規定,如果區塊中存在letconst命令,這個區塊對這些命令聲明的變數,從一開始就形成了封閉作用域(暫時性死區)凡是在聲明之前就使用這些變數,就會報錯

  • 暫時性死區的本質就是,只要一進入當前作用域,所要使用的變數就已經存在了,但是不可獲取,只有等到聲明變數的那一行代碼出現,才可以獲取和使用該變數
    function bar(x = y, y = 2) {//逗號的結合性是從左到右,所以先計算x=y表達式,所有報錯。
      return [x, y];
    }
    
    bar(); // 報錯
    // 不報錯
    var x = x;
    
    // 報錯
    let x = x;
    // ReferenceError: x is not defined
    //在變數x的聲明語句還沒有執行完成前,就去取x的值,導致報錯”x 未定義“
  • 不允許重覆聲明,let不允許在相同作用域內,重覆聲明同一個變數

  • ES6 聲明變數的六種方法 

    ES5 只有兩種聲明變數的方法:var命令和function命令。ES6除了添加letconst命令,後面章節還會提到,另外兩種聲明變數的方法:import命令和class命令。所以,ES6 一共有6種聲明變數的方法。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設計模式(Design Patterns) ——可復用面向對象軟體的基礎 設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的, ...
  • 1.兩個元素換行書寫時,在實際的佈局中展示為兩個元素之間多了一個區間(這個區間通常是因為代碼在換行時,解析會自動預設為一個空格字元),所以在實際應用時,如果想要將兩個元素完全無縫隙的放置在一起併排顯示時,應該註意使用浮動和定位,或者可以通過設置父級元素的font-size:0;的方法; 2.使用絕對 ...
  • 前面的話 Douglas Crockford大神根據自己的理念用JavaScript寫了一個JavaScript代碼規範檢查工具,這就是JSLint。後來非常流行,也的確幫助了廣大的JavaScript程式員。但是,大神對於自己的代碼規範不做絲毫的妥協,對開源社區的反饋的回應也不禮貌。於是,JSLi ...
  • CSS中可以通過設置為元素設置一個position屬性值,從而達到將不同的元素顯示在不同的位置,或者固定顯示在某一個位置,或者顯示在某一層頁面之上。 position的值可以設為relative,absolute,fixed,static。 HTML代碼里定義兩個區塊: 1.相對定位: 以上代碼將實 ...
  • 一、React的發展 facebook在構建instagram網站的時候遇見兩個問題: 1、數據綁定的時候,大量操作真實dom,性能成本太高 2、網站的數據流向太混亂,不好控制 於是facebook起初調研過市場上已存的mvc框架,發現都不太滿意,於是就推陳出新,開發了react框架,併在2013年 ...
  • 0. 掌握基礎 對於任何行業任何工作來說,融會貫通是獲得成功的關鍵。一個人想要成為優秀程式員,就必須有堅實的基礎。核心理念的理解會幫助你用最好的方法設計和實施出最完美的方案。如果你感覺到不能掌握核心的電腦科學或者某個編程語言的知識點,現在開始回顧基礎一點都不晚。 1. 開始為你寫過的代碼貼上標簽( ...
  • let實際上為 JavaScript 新增了塊級作用域。 塊級作用域的出現,實際上使得獲得廣泛應用的立即執行函數表達式(IIFE)不再必要了。 本質上,塊級作用域是一個語句,將多個操作封裝在一起,沒有返回值。 ...
  • 最近閑來沒事,做了一個畫江湖圖片滾動載入的demo,大家感興趣可以下來看一下 以下為界面截圖: 圖片會隨滾動條的拖動動態載入,目前來說只是載入的本地的資源,大家可以從後臺抓取數據來實現懶載入. 支持圖片點擊然後大圖來查看: 代碼已經放到git上了,歡迎下載試用 https://github.com/ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...