ECMAScript6新特性之let、const

来源:http://www.cnblogs.com/alanbrooke/archive/2017/08/01/7270482.html
-Advertisement-
Play Games

第一次在博客園寫博客,想把自己每一天學習到的知識點記錄下來,心裡有點緊張(PS:不知道自己能不能寫好......嘿嘿)。言歸正傳,咱們先來說說“ECMAScript”這到底是啥玩意兒?它和javascript的關係又是如何的?首先,在1996年11月的時候,javascript的創造者(網景公司Ne ...


  第一次在博客園寫博客,想把自己每一天學習到的知識點記錄下來,心裡有點緊張(PS:不知道自己能不能寫好......嘿嘿)。言歸正傳,咱們先來說說“ECMAScript”這到底是啥玩意兒?它和javascript的關係又是如何的?首先,在1996年11月的時候,javascript的創造者(網景公司Netscape)和sun公司聯合ECMA(歐洲電腦製造商協會)對javascript進行標準化,次年,ECMA發佈262號標準文件文件(ECMA-262)的第一版,規定了瀏覽器腳本語言的標準(在這裡提個問題:為什麼要標準化?),並將這種語言稱為ECMAScript,這個版本就是1.0版的。這個標準一開始就是針對與javascript來制定的,但是沒有稱之為“javascript”,這其中有兩個原因,一是:商標;二是:想體現這門語言的規格制定者是ECMA,這樣有利於保證開發性和中立性。所以,ECMAScript和javascript之間的關係就是,前者來制定規格,後者來實現(另外的ECMAScript的實現還有JScript和ActionScript)。一般的情況下,這兩個詞是可以互換的。

  接下來來介紹一下es6中的新特性之“let”。首先,這個玩意兒其實和var這個命令類似,都是用於聲明變數的,但是所聲明的變數只在let命令所在的代碼塊內有效(這裡涉及到塊級作用域的概念,然而這個概念也是es6中提出來的。在後面我再來講。PS:在其他編程語言中,早就有塊級了)。

上面的兩張圖就反映出了let所聲明的變數只在let命令所在的代碼塊內有效。下麵來舉個例子:

發現區別了嗎?var聲明的變數它是全局範圍內都有效的,每一次的迴圈,新的i值都會覆蓋舊值,導致最後輸出的是最後一輪的i值(當然,也可以利用閉包來解決這個問題【第三張圖】)。如果使用的是let,聲明的變數僅在塊級作用域內有效,當前的i只在本輪迴圈有效,所以每一次迴圈i其實都是一個新的變數。在期間我發現了一個更神奇的東西,請看下麵一張圖:

  註意:①、let不像var一樣會發生“變數提升”的現象,所以,使用之前,必須先聲明,不然就會報錯。

     ②、暫時性死區(temporal dead zone,簡稱TDZ),只要塊級作用域內有let命令,它所聲明的變數就會綁定這個區域,不收外部的的影響。簡單的來說,在代碼塊中,使用let命令聲明變數之前,變數都是不能用的。例子:

     ③、let不允許在同一個作用域內重覆聲明同一個變數。

  好了,現在再來講一講上文提及到的一個東東:“塊級作用域”。在es5中只有“全局作用域”和“函數作用域”。這使得我在剛開始學的時候一臉矇蔽,其他語言都有塊級作用域(比如C語言),但js就沒有。幸好在es6中加入了“塊級作用域”的概念,let實際上為javascript新增了塊級作用域,有了塊級作用域,就可以避免變數泄露成全局變數,代碼快之間不會受到影響。另外,es6里還規定了:函數本身的作用域在其塊級作用域內。註意!註意!註意!重要的事說三遍:(如果是在嚴格模式下,函數只能在頂級作用域和函數內部聲明,其他情況下【比如:if語句、迴圈語句下】就會報錯) :

 

  最後再來說說es6中的新特性之“const”,好吧,其他編程語言里早就有了,但是javascript在es6之前還是沒有~~。這個是用來聲明常量的,其表現為不可修改的,還有就是聲明的同時必須進行賦值,否則就會報錯。

  註意:①、在作用域方面,它其實和let作用域相同:只在聲明所在的塊級作用域內有效;

     ②、const命令聲明的常量同樣不存在“變數提升”,同樣存在“暫時性死區”,必須在聲明後才能使用。

     ③、const也不能重覆聲明常量。

  綜合例子:

     ④、對於複合類型的變數,常量名不指向數據,而是指向的是數據的指針地址,const命令只是保證了地址沒有變,但並不保證數據的不變,所以在使用const命令聲明常量為對象時要小心!!其實我們可以對其對象進行“凍結”,使用Object.freeze()即可實現。

 

  今天就寫到這裡啦~~~


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

-Advertisement-
Play Games
更多相關文章
  • 這是一道非常好的面試題, 考察以下知識點: 1,this的指向 2,原型(prototype)以及原型鏈 3,繼承 4,引用 要解出這道題,要理解以下幾句話就可以了: 1,每一個構造函數,都有一個原型[[prototype]]屬性 指向構造函數的原型對象 2,每一個實例生成的時候,都會在記憶體中產生一 ...
  • 前言 Express 是基於 Node.js 平臺的 web 應用開發框架,在學習了 Node.js 的基礎知識後,可以使用 Express 框架來搭建一個 web 應用,實現對資料庫的增刪查改。 資料庫選擇 MongoDB,它是一個基於分散式文件存儲的開源資料庫系統,Mongoose 是 Mong ...
  • 一直想寫這篇“十日談”,聊聊我對Web前端開發的體會,順便解答下周圍不少人的困惑和迷惘。我不打算聊太多技術,我想,通過技術的歷練,得到的反思應當更重要。 我一直認為自己是“初級”前端開發工程師,一方面我入道尚淺,只有短短幾年,另一方面我自知對技術的鑽研並不深入,可能是由於環境的原因,當然最重要的是, ...
  • 對於Node.js新手,搭建一個靜態資源伺服器是個不錯的鍛煉,從最簡單的返迴文件或錯誤開始,漸進增強,還可以逐步加深對http的理解。那就開始吧,讓我們的雙手沾滿網路請求! Note: 當然在項目中如果有使用express框架,用 "express.static" 一行代碼就可以達到目的了: 這裡我 ...
  • 認識less和webstrom的less配置 今天完成的事情: 首先第一件事情是,整理一下常用的顏色攝取 #F1F1F1 google的設置頁面的body的背景顏色 #FFF 為google的內容塊的背景顏色 另外就是學習test11中提到的less 一。跳出less和sass的戰鬥。網上一大堆的互 ...
  • 在 Update ueditor.config.js 文件中,xssFilter導致插入視頻異常,編輯器在切換源碼的過程中過濾掉img的_url屬性(用來存儲視頻url)_src/plugins/video.js里處理的是_url,而不是_src。 修改ueditor.config.js: img: ...
  • Ajax type這個裡面填什麼呢?通常大家都會說get和post。那麼還有2個是什麼呢 (預設: "GET") 請求方式 ("POST" 或 "GET"), 預設為 "GET"。註意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支持。 此處是網上找來的解釋 1 ...
  • [1]引入 [2]代理和反射 [3]陷阱代理 [4]可撤銷代理 [5]模仿數組 [6]將代理用作原型 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...