91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

let const 與var的區別是什么

發布時間:2021-07-15 15:41:24 來源:億速云 閱讀:158 作者:chen 欄目:大數據

本篇內容主要講解“let const 與var的區別是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“let const 與var的區別是什么”吧!

es6里面的一些新特性還是很好用的,但是有的時候看文檔會帶來一些疑惑。let、const這兩個東西和var到底有哪些不同呢?下面咱們結合一些小例子給大家展示一下。

首先來了解一下let與var的區別,主要有一下三點:

第一點,var在javascript中是支持預解析的,而let不支持預解析,代碼如圖:

let const 與var的區別是什么

執行結果如圖:

let const 與var的區別是什么

結果未報錯,下面將var換成let,代碼如下:

let const 與var的區別是什么

執行結果:

let const 與var的區別是什么

錯誤提示為:Uncaught ReferenceError: a is not defined,翻譯成中文大概意思就是a未定義。這與undefined是不同的,undefined是未賦值,但已經定義了。

第二點:var可以重復定義同一個變量,但是let不可以,看代碼:

let const 與var的區別是什么

執行結果如圖:

let const 與var的區別是什么

結果沒有報錯,將var換成let:

let const 與var的區別是什么

執行結果為:

let const 與var的區別是什么

錯誤信息為:Uncaught SyntaxError: Identifier 'a' has already been declared。翻譯為中文,意思是a已經被定義。

第三點:let可以形成塊級作用域,在es6之前javascript只有函數作用域,沒有塊級作用域。那在es6之前我們是怎么實現塊級作用域的呢?有朋友已經猜到了,立即執行函數表達式,簡稱IIFF。看代碼:

let const 與var的區別是什么

執行結果為:

let const 與var的區別是什么

可以看到通過一個立即執行函數表達式,我們實現了一個局部作用域或者塊級作用域,但是有了let之后就不需要寫這樣的代碼了,代碼修改如下。

let const 與var的區別是什么

執行結果:

let const 與var的區別是什么

可以看到兩者實現的效果是一樣的。

下面看一道經典面試題:

let const 與var的區別是什么

說出以上代碼的執行結果,并解釋其原理。將其改造為,依次輸出0,1,2,3,4

首先上面的代碼執行結果為:每隔200ms依次打印5,一共打印5次。

結果為什么是這樣的呢?這里面涉及里javascript里面的兩個知識點,作用域和定時器setTimeout回調函數異步執行。這段代碼用var聲明了一個全局變量i,循環執行完成之后,i變為5,此時javascript主線程空閑,異步回調隊列中的函數依次被eventloop放進主線程執行,因為此時的i已經變為了5,所以打印了5次5。

以上便是這道題目的前兩點的解析。那第三點,該如何改造代碼呢?

明白了原理就好改造了,既然定時器的回調函數中的i每次都是從全局作用域中取值,能不能在循環的時候將其放到局部作用域中呢,當然可以看代碼:

let const 與var的區別是什么

執行結果為:

let const 與var的區別是什么

那這些和let有什么關系呢?回憶一下let和var的第三點不同,let可以生成局部作用域,代碼再次改造:

let const 與var的區別是什么

執行結果為:

let const 與var的區別是什么

以上便是let和var的不同,如果大家還有補充歡迎留言。

下面是const與var的不同,以上三點完全適用const,但是const與let或是var還有兩點不同。

首先是第一點,const是用來定義常量的,常量定義之后是不允許改變的。看代碼:

let const 與var的區別是什么

執行結果:

let const 與var的區別是什么

錯誤提示為:Uncaught TypeError: Assignment to constant variable.意思是常量已經賦值了。

這里有一個小坑,看如下代碼:

let const 與var的區別是什么

來看看執行結果,看看和你心理預期是否一致。

let const 與var的區別是什么

沒有報錯?為什么 ?因為a的值并沒有改變,依然指向剛開始賦值的那個對象,并為重新賦值,如果將a重新賦值,就會報錯了。大家可以試試。用const定義的常量只要是引用類型數據,改變這個引用類型數據的結構或屬性,都是允許的。引用類型包括哪些呢?數組和對象。

第二點是用const定義常量必須賦值。不賦值的話,沒有任何意思,所以報錯,看代碼:

let const 與var的區別是什么

執行結果為:

let const 與var的區別是什么

錯誤提示為:Uncaught SyntaxError: Missing initializer in const declaration。意思是缺少初識值。

到此,相信大家對“let const 與var的區別是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

var
AI

宜阳县| 临沧市| 梅州市| 余江县| 托克逊县| 海兴县| 上犹县| 大冶市| 庆安县| 桐乡市| 武陟县| 万载县| 仙居县| 嘉义市| 乐亭县| 章丘市| 平潭县| 通州区| 民权县| 台北县| 自治县| 绵阳市| 梅河口市| 揭东县| 崇明县| 宝鸡市| 锡林浩特市| 诏安县| 加查县| 马公市| 镶黄旗| 全南县| 福州市| 丰县| 西丰县| 阳谷县| 应城市| 衡南县| 桂林市| 广丰县| 潜山县|