欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談ECMAScript6新特性之let、const

 更新時間:2017年08月02日 08:53:58   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談ECMAScript6新特性之let、const。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

第一次寫博客有點緊張,如果說的不對的地方,歡迎大家留言指正。咱們先來說說“ECMAScript”這到底是啥玩意兒?它和javascript的關系又是如何的?首先,在1996年11月的時候,javascript的創(chuàng)造者(網(wǎng)景公司Netscape)和sun公司聯(lián)合ECMA(歐洲計算機制造商協(xié)會)對javascript進行標準化,次年,ECMA發(fā)布262號標準文件文件(ECMA-262)的第一版,規(guī)定了瀏覽器腳本語言的標準(在這里提個問題:為什么要標準化?),并將這種語言稱為ECMAScript,這個版本就是1.0版的。這個標準一開始就是針對與javascript來制定的,但是沒有稱之為“javascript”,這其中有兩個原因,一是:商標;二是:想體現(xiàn)這門語言的規(guī)格制定者是ECMA,這樣有利于保證開發(fā)性和中立性。所以,ECMAScript和javascript之間的關系就是,前者來制定規(guī)格,后者來實現(xiàn)(另外的ECMAScript的實現(xiàn)還有JScript和ActionScript)。一般的情況下,這兩個詞是可以互換的。

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

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

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

注意①、let不像var一樣會發(fā)生“變量提升”的現(xiàn)象,所以,使用之前,必須先聲明,不然就會報錯。

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

③、let不允許在同一個作用域內(nèi)重復聲明同一個變量。

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

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

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

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

?、邸onst也不能重復聲明常量。

綜合例子:

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

以上這篇淺談ECMAScript6新特性之let、const就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 讓人蛋疼的JavaScript語法特性

    讓人蛋疼的JavaScript語法特性

    JavaScript有很多地方和我們熟知的C、Java等的編程習慣不同,這些不同會產(chǎn)生很多讓人意想不到的事情。今天我們就來探討下這些讓人蛋疼的語法特性
    2014-09-09
  • JavaScript中Math.SQRT2屬性的使用詳解

    JavaScript中Math.SQRT2屬性的使用詳解

    這篇文章主要介紹了JavaScript中Math.SQRT2屬性的使用詳解,是JS入門學習中的基礎知識,需要的朋友可以參考下
    2015-06-06
  • JavaScript學習歷程和心得小結

    JavaScript學習歷程和心得小結

    在過去,JavaScript只是被用來做一些簡單的網(wǎng)頁效果,比如表單驗證、浮動廣告等,所以那時候JavaScript并沒有受到重視。
    2010-08-08
  • javascript定義變量時加var與不加var的區(qū)別

    javascript定義變量時加var與不加var的區(qū)別

    這篇文章主要介紹了javascript 變量中 var 與不加var的區(qū)別,需要的朋友可以參考下
    2014-12-12
  • javascript XMLHttpRequest對象全面剖析

    javascript XMLHttpRequest對象全面剖析

    通過不必把Web頁面寄送到服務器而實現(xiàn)數(shù)據(jù)傳送,XMLHttpRequest對象為客戶端與服務器之間提供了一種動態(tài)的交互能力。
    2010-04-04
  • JavaScript之數(shù)組(Array)詳解

    JavaScript之數(shù)組(Array)詳解

    這篇文章主要介紹了JavaScript之數(shù)組(Array)詳解,本文詳細講解了JavaScript數(shù)組的創(chuàng)建、檢測數(shù)組、轉化方法、棧方法、隊列方法、重排序方法、操作方法、位置方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Internet Explorer 11 瀏覽器介紹:別叫我IE

    Internet Explorer 11 瀏覽器介紹:別叫我IE

    這篇文章主要介紹了Internet Explorer 11 瀏覽器介紹:別叫我IE,需要的朋友可以參考下
    2014-09-09
  • Typescript中的as、問號與感嘆號詳解

    Typescript中的as、問號與感嘆號詳解

    這篇文章主要介紹了Typescript中的as、問號與感嘆號詳解,本文分別講述了這幾個關鍵字的含義作用以及實例,通過文字和代碼的描述,詳細的表達.以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 談談關于JavaScript 中的 MVC 模式

    談談關于JavaScript 中的 MVC 模式

    本文介紹了模型-視圖-控制器模式在 JavaScript 中的實現(xiàn),有需要的朋友可以參考一下
    2013-04-04
  • JavaScript 學習筆記(九)call和apply方法

    JavaScript 學習筆記(九)call和apply方法

    兩者實現(xiàn)的功能是完全一樣的,只是參數(shù)傳遞方式不一樣,call是將各個參數(shù)以逗號(,)隔開,而apply是將所有參數(shù)組成一個數(shù)組進行傳遞。
    2010-01-01

最新評論