亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入理解ES6學習筆記之塊級作用域綁定

2019-11-19 15:44:17
字體:
來源:轉載
供稿:網友

眾所周知,js中的var聲明存在變量提升機制,因此ESMAScript 6引用了塊級作用域來強化對變量生命周期的控制
let const 聲明不會被提升,有幾個需要注意的點

1、不能被重復聲明

假設作用域中已經存在某個標識符(無論該標識符是通過var聲明還是let、const變量聲明),此時再使用let或const關鍵定聲明會拋錯

var count=10let count=20// 此處則會拋出錯誤,因為同一作用域內不能重復聲明

如果當前作用域內嵌另一個作用域,便可在內嵌的作用域中用let聲明同名變量

var count=10if(true){  let count=20}

2、const聲明的常量必須進行初始化

像下面這樣聲明就會報錯

const name;//語法錯誤,常量未初始化

3、不可以為const定義的常量再賦值,真正的本質是const聲明不允許修改綁定,但允許修改值(也就是說const聲明對象后,可以修改該對象的屬性值)

const person={ name:'angela'}//可以修改對象屬性的值person.name='yun'// 修改綁定則會拋出語法錯誤person={ 'name':'Shining'}

4、臨時性死區(Temporal Dead Zone)

JavaScript引擎在掃描代碼發現變量聲明時,要么將它們提升至作用域頂部(遇到var聲明),要么將聲明放到TDZ中(遇到let和const聲明),訪問TDZ中的變量會觸發運行時錯誤,只有執行過變量聲明語句后,變量才會從TDZ中移出,才能正常訪問
如下代碼就因為在if塊級作用域內執行console.log時value已經在TDZ中了,以前typeof是一個相對不易出錯的操作符,但其實也無法阻擋引擎拋出錯誤

在聲明前訪問塊級綁定會導致錯誤,因為綁定在臨時死區中

if (true) { console.log(typeof value)//引用錯誤 let value = 'blue'}

而在let聲明的作用域外對該變量使用typeof則不會報錯

console.log(typeof value)if (true) {  let value = 'blue'}

5、塊級作用域綁定

之前在循環中創建函數都有些不可言狀

var funcs = []for (var i = 0; i < 10; i++) { funcs.push(function () {  console.log(i) })}funcs.forEach(function (func) { func()})

因為循環內部創建的函數全部都保留了對相同變量的引用,循環結束時變量i的值為10,所以結果會輸出10次10

于是大家會在循環中使用立即調用函數表達式,以強制生成計數器變量的副本,以便輸出1、2、3......

var funcs = []for (var i = 0; i < 10; i++) { funcs.push((function (value) {  return function () {   console.log(value)  } })(i))}funcs.forEach(function (func) { func()})

有了let,立即調用函數表達式則可以簡化,其實每次迭代循環都會創建一個新變量,并以之前迭代中同名變量的值將其初始化

var funcs = []for (let i = 0; i < 10; i++) {//其實是每次循環的時候let聲明都會創建一個新變量i并將其初始化為i的當前值,所以在循環內部創建的每個函數都能得到屬于它們自己的i的副本 funcs.push(function () {  console.log(i) })}funcs.forEach(function (func) { func()//這里輸出是0 然后是1、2....9})

這個特性同樣適用于for in中,舉例來說

var funcs = [], obj = {  a: true,  b: true,  c: true }for (let key in obj) { funcs.push(function () {  console.log(key) })}funcs.forEach(function (func) { func()//輸出的是a b c})

6、循環中的let聲明特性同樣適用于const聲明,唯一的區別是const不能更改綁定

上面的例子中把let換成const同樣輸出a b c

var funcs = [], obj = {  a: true,  b: true,  c: true }//之所以可以運用for in 和for of循環中,是因為每次迭代不會修改已有綁定,而是會創建一個新綁定for (const key in obj) { funcs.push(function () {  console.log(key)// 同樣輸出a b c 唯一的區別是循環內不能更改key的值 })}funcs.forEach(function (func) { func()})

下面的這個例子則會報錯,因為在for循環中更改了i的綁定而const常量不能更改綁定

var funcs = []for (const i = 0; i < 10; i++) { funcs.push(function () {  console.log(i) })}funcs.forEach(function (func) { func()})

7、全局作用域綁定

當var被作用于全局作用域時,它會創建一個新的全局變量作用全局對象(瀏覽器環境中的window對象)的屬性,這意味著用var很可能會無意中覆蓋一個已經存在的全局變量

從上圖代碼中看出即便是全局對象RegExp Array都會被覆蓋

但是let或const會在全局作用域下創建一個新的綁定,但該綁定不會添加為全局對象的屬性,換句話說用let或const不能覆蓋全局變量,而只能遮蔽它

這個時候的RegExp和window.RegExp是不相同的

let RegExp='hello'console.log(RegExp) //helloconsole.log(window.RegExp===RegExp)//falseconst ncz='hi'console.log(ncz)console.log("ncz" in window)

最佳實踐:

默認使用let而不是var

默認使用const,只有確實需要改變變量的值時使用let

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩电影中文字幕在线| 综合久久五月天| 国产日韩在线看片| 亚洲成人亚洲激情| 亚洲天堂2020| www.亚洲一区| 亚洲自拍在线观看| 中文字幕日韩视频| 另类天堂视频在线观看| 日韩欧美在线视频日韩欧美在线视频| 国产99视频精品免视看7| 国产欧美中文字幕| 久久人人看视频| 国产亚洲欧美aaaa| 欧美电影免费观看高清完整| 午夜精品久久久久久久久久久久久| 91精品久久久久久久久久| 国产欧美一区二区三区视频| www.日本久久久久com.| 亚洲视频国产视频| 91精品在线看| xxxxx成人.com| 亚洲人成网站999久久久综合| 人体精品一二三区| 亚洲国产精品国自产拍av秋霞| 国产丝袜视频一区| 欧美日韩成人在线播放| 国产亚洲精品综合一区91| 欧美一级成年大片在线观看| 国产精品久久久久影院日本| 高清欧美电影在线| 亚洲福利影片在线| 美女福利精品视频| 国产精品免费电影| 亚洲性69xxxbbb| 亚洲深夜福利在线| 欧美洲成人男女午夜视频| 日韩中文字幕在线视频播放| 国产精品网站大全| 成人精品视频99在线观看免费| 国产91在线播放九色快色| 亚洲国产精品福利| 久久91精品国产91久久跳| www.亚洲成人| 久久久久久久网站| 日韩国产精品亚洲а∨天堂免| 最近2019中文字幕第三页视频| 国产午夜精品美女视频明星a级| 中文字幕日韩专区| 国产国语刺激对白av不卡| 欧美又大又粗又长| 国产精品久久一| 国产91免费看片| 欧美视频免费在线观看| 91九色国产视频| 一道本无吗dⅴd在线播放一区| 亚洲自拍小视频| 亚洲欧美自拍一区| 久久精品国产v日韩v亚洲| 精品国产一区二区三区久久| 97精品国产91久久久久久| 成人国内精品久久久久一区| 最新国产精品拍自在线播放| 国内久久久精品| 亚洲午夜性刺激影院| 亚洲电影中文字幕| 国产精品国产亚洲伊人久久| 色哟哟亚洲精品一区二区| 欧美体内谢she精2性欧美| 91久久久国产精品| 欧美性资源免费| 国产成人亚洲综合| 国产精品96久久久久久又黄又硬| 日韩av理论片| 欧美激情中文字幕在线| 精品国产成人av| 国产在线视频2019最新视频| 国产精品揄拍500视频| 在线免费看av不卡| 亚洲黄色片网站| 欧美日韩视频在线| 欧美一区三区三区高中清蜜桃| 日韩av在线免费播放| 国产亚洲人成a一在线v站| 欧美午夜激情小视频| 日韩av免费一区| 国产精品高潮呻吟久久av无限| 亚洲人av在线影院| 国产九九精品视频| 欧美一级视频免费在线观看| 亚洲香蕉伊综合在人在线视看| 欧美日韩国产精品专区| 国产精品福利在线观看| 日韩女在线观看| 欧美国产精品人人做人人爱| 午夜精品久久久久久久久久久久久| 欧美做受高潮1| 亚洲性无码av在线| 亚洲国产成人在线播放| 日韩视频在线免费观看| 色99之美女主播在线视频| 国产亚洲欧美日韩一区二区| 国产精品网站入口| 国产精品国产自产拍高清av水多| 欧美一级大片在线观看| 亚洲成人激情在线| 亚洲免费福利视频| 国产精品白丝av嫩草影院| 国产91精品在线播放| 欧美日韩中文字幕在线视频| 最新69国产成人精品视频免费| 91人成网站www| 最近的2019中文字幕免费一页| 国模私拍视频一区| 日韩精品在线观| 色无极亚洲影院| 亚洲第一男人av| 成人免费高清完整版在线观看| 亚洲第一综合天堂另类专| 亚洲成人a级网| 亚洲视频在线播放| 在线免费观看羞羞视频一区二区| 亚洲精品久久久久| 亚洲欧洲国产精品| 色伦专区97中文字幕| 91嫩草在线视频| 欧美另类老女人| 国产精品高潮呻吟久久av野狼| 亚洲欧美日韩精品久久奇米色影视| 久久精品亚洲精品| 亚洲福利视频免费观看| 欧美激情成人在线视频| 欧美乱妇高清无乱码| 亚洲第一区第二区| 亚洲免费小视频| 日韩激情av在线免费观看| 亚洲精品v欧美精品v日韩精品| 国产精品一区二区在线| 久久69精品久久久久久国产越南| 久久久久久国产| 国产精品白丝av嫩草影院| 日韩一区在线视频| 日本亚洲欧美三级| 欧美激情小视频| 中文字幕日韩精品在线| 隔壁老王国产在线精品| 亚洲一级黄色片| 欧美日韩国产中文精品字幕自在自线| 国产一区二区在线免费| 成人黄色中文字幕| 国产欧美日韩精品在线观看| 亚洲女人天堂成人av在线| 高跟丝袜一区二区三区| xxxx性欧美| 欧美午夜性色大片在线观看| 欧美性猛交xxxx乱大交极品| 久久久久久久色| 中日韩午夜理伦电影免费| 成人黄色影片在线| 亚洲最大的免费| 欧美极品在线视频| 成人黄色影片在线| 午夜精品在线观看| 欧美乱妇高清无乱码|