gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

es6中let怎么用

在es6中,let關鍵字用于聲明變量;但是所聲明的變量,只在let命令所在的代碼塊內有效。let不會發生“變量提升”現象,所以變量一定要在聲明后使用,否則報錯。只要塊級作用域內存在let命令,它所聲明的變量就“綁定”(binding)這個區域,不再受外部的影響。

es6中let怎么用

本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

es6 let關鍵字

ES6新增了let命令,用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內有效。

{   let a = 10;   var b = 1; }  a // ReferenceError: a is not defined. b // 1
登錄后復制

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

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

for (let i = 0; i < 10; i++) {}  console.log(i); //ReferenceError: i is not defined
登錄后復制

上面代碼中,計數器i只在for循環體內有效,在循環體外引用就會報錯。

下面的代碼如果使用var,最后輸出的是10。

var a = []; for (var i = 0; i < 10; i++) {   a[i] = function () {     console.log(i);   }; } a[6](); // 10
登錄后復制

上面代碼中,變量ivar聲明的,在全局范圍內都有效。所以每一次循環,新的i值都會覆蓋舊值,導致最后輸出的是最后一輪的i的值。

如果使用let,聲明的變量僅在塊級作用域內有效,最后輸出的是6。

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

上面代碼中,變量ilet聲明的,當前的i只在本輪循環有效,所以每一次循環的i其實都是一個新的變量,所以最后輸出的是6。

不存在變量提升

let不像var那樣會發生“變量提升”現象。所以,變量一定要在聲明后使用,否則報錯。

console.log(foo); // 輸出undefined console.log(bar); // 報錯ReferenceError  var foo = 2; let bar = 2;
登錄后復制

上面代碼中,變量foovar命令聲明,會發生變量提升,即腳本開始運行時,變量foo已經存在了,但是沒有值,所以會輸出undefined。變量barlet命令聲明,不會發生變量提升。這表示在聲明它之前,變量bar是不存在的,這時如果用到它,就會拋出一個錯誤。

暫時性死區

只要塊級作用域內存在let命令,它所聲明的變量就“綁定”(binding)這個區域,不再受外部的影響。

var tmp = 123;  if (true) {   tmp = 'abc'; // ReferenceError   let tmp; }
登錄后復制

上面代碼中,存在全局變量tmp,但是塊級作用域內let又聲明了一個局部變量tmp,導致后者綁定這個塊級作用域,所以在let聲明變量前,對tmp賦值會報錯。

ES6明確規定,如果區塊中存在letconst命令,這個區塊對這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報錯。

總之,在代碼塊內,使用let命令聲明變量之前,該變量都是不可用的。這在語法上,稱為“暫時性死區”(temporal dead zone,簡稱TDZ)。

if (true) {   // TDZ開始   tmp = 'abc'; // ReferenceError   console.log(tmp); // ReferenceError    let tmp; // TDZ結束   console.log(tmp); // undefined    tmp = 123;   console.log(tmp); // 123 }
登錄后復制

上面代碼中,在let命令聲明變量tmp之前,都屬于變量tmp的“死區”。

“暫時性死區”也意味著typeof不再是一個百分之百安全的操作。

typeof x; // ReferenceError let x;
登錄后復制

上面代碼中,變量x使用let命令聲明,所以在聲明之前,都屬于x的“死區”,只要用到該變量就會報錯。因此,typeof運行時就會拋出一個ReferenceError

作為比較,如果一個變量根本沒有被聲明,使用typeof反而不會報錯。

typeof undeclared_variable // "undefined"
登錄后復制

上面代碼中,undeclared_variable是一個不存在的變量名,結果返回“undefined”。所以,在沒有let之前,typeof運算符是百分之百安全的,永遠不會報錯。現在這一點不成立了。這樣的設計是為了讓大家養成良好的編程習慣,變量一定要在聲明之后使用,否則就報錯。

有些“死區”比較隱蔽,不太容易發現。

function bar(x = y, y = 2) {   return [x, y]; }  bar(); // 報錯
登錄后復制

上面代碼中,調用bar函數之所以報錯(某些實現可能不報錯),是因為參數x默認值等于另一個參數y,而此時y還沒有聲明,屬于”死區“。如果y的默認值是x,就不會報錯,因為此時x已經聲明了。

function bar(x = 2, y = x) {   return [x, y]; } bar(); // [2, 2]
登錄后復制

ES6規定暫時性死區和letconst語句不出現變量提升,主要是為了減少運行時錯誤,防止在變量聲明前就使用這個變量,從而導致意料之外的行為。這樣的錯誤在ES5是很常見的,現在有了這種規定,避免此類錯誤就很容易了。

總之,暫時性死區的本質就是,只要一進入當前作用域,所要使用的變量就已經存在了,但是不可獲取,只有等到聲明變量的那一行代碼出現,才可以獲取和使用該變量。

不允許重復聲明

let不允許在相同作用域內,重復聲明同一個變量。

// 報錯 function () {   let a = 10;   var a = 1; }  // 報錯 function () {   let a = 10;   let a = 1; }
登錄后復制

因此,不能在函數內部重新聲明參數。

function func(arg) {   let arg; // 報錯 }  function func(arg) {   {     let arg; // 不報錯   } }
登錄后復制

塊級作用域

為什么需要塊級作用域?

ES5只有全局作用域和函數作用域,沒有塊級作用域,這帶來很多不合理的場景。

第一種場景,內層變量可能會覆蓋外層變量。

var tmp = new Date();  function f() {   console.log(tmp);   if (false) {     var tmp = "hello world";   } }  f(); // undefined
登錄后復制

上面代碼中,函數f執行后,輸出結果為undefined,原因在于變量提升,導致內層的tmp變量覆蓋了外層的tmp變量。

第二種場景,用來計數的循環變量泄露為全局變量。

var s = 'hello';  for (var i = 0; i < s.length; i++) {   console.log(s[i]); }  console.log(i); // 5
登錄后復制

上面代碼中,變量i只用來控制循環,但是循環結束后,它并沒有消失,泄露成了全局變量。

ES6的塊級作用域

let實際上為JavaScript新增了塊級作用域。

function f1() {   let n = 5;   if (true) {     let n = 10;   }   console.log(n); // 5 }
登錄后復制

上面的函數有兩個代碼塊,都聲明了變量n,運行后輸出5。這表示外層代碼塊不受內層代碼塊的影響。如果使用var定義變量n,最后輸出的值就是10。

ES6允許塊級作用域的任意嵌套。

{{{{{let insane = 'Hello World'}}}}};
登錄后復制

上面代碼使用了一個五層的塊級作用域。外層作用域無法讀取內層作用域的變量。

{{{{   {let insane = 'Hello World'}   console.log(insane); // 報錯 }}}};
登錄后復制

內層作用域可以定義外層作用域的同名變量。

{{{{   let insane = 'Hello World';   {let insane = 'Hello World'} }}}};
登錄后復制

塊級作用域的出現,實際上使得獲得廣泛應用的立即執行函數表達式(IIFE)不再必要了。

// IIFE 寫法 (function () {   var tmp = ...;   ... }());  // 塊級作用域寫法 {   let tmp = ...;   ... }
登錄后復制

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
欧美成人三级在线视频| 欧美 日韩 国产 在线观看| 九九久久久久久| 国产在线观看福利| 草草草视频在线观看| 日韩视频在线免费播放| 日韩一级理论片| 超碰超碰在线观看| xxxx在线免费观看| 国产卡一卡二在线| 麻豆一区二区三区在线观看| 在线观看免费的av| 香蕉视频xxxx| 成人污网站在线观看| av在线观看地址| 久久网站免费视频| 日韩一区二区三区久久| 免费不卡av网站| av一区二区三区免费观看| 黄色一级片播放| 色婷婷一区二区三区av免费看| 欧美日韩亚洲自拍| 黄色片免费网址| 国产精品第157页| av无码精品一区二区三区| 国产精品视频分类| 国产一级大片免费看| aⅴ在线免费观看| 日本www在线播放| 天天插天天操天天射| 欧美做受777cos| 国产精品69页| 国产一区二区片| wwwxxx黄色片| 男女爱爱视频网站| 日韩中文字幕免费在线| 懂色av粉嫩av蜜臀av| 欧洲精品在线播放| 99视频在线观看视频| av电影一区二区三区| 国产精品jizz在线观看老狼| 国精产品一区一区三区视频| 亚洲av无日韩毛片久久| 欧美三级一级片| 国产性xxxx18免费观看视频| 无码人妻精品一区二区三区66| 国产男女无遮挡| 国内外成人激情免费视频| 国产av天堂无码一区二区三区| 在线视频观看91| 亚洲视频在线观看一区二区三区| 蜜臀av色欲a片无码精品一区| 91小视频在线播放| xxxx一级片| 999香蕉视频| 亚洲熟妇无码另类久久久| 黄色成人在线免费观看| 超碰在线免费观看97| 色婷婷成人在线| 免费一区二区三区在线观看| 日本xxxxxxx免费视频| 国产欧美日韩小视频| 中文字幕第50页| 四虎免费在线观看视频| 婷婷视频在线播放| 亚洲综合20p| 国产成人生活片| 麻豆一区二区三区在线观看| 五月天av影院| 国产一级大片免费看| 男人天堂av片| 超碰人人爱人人| 成人国产一区二区三区| 在线观看成人免费| 国产制服91一区二区三区制服| 中文字幕第一页亚洲| 久久精品在线免费视频| 国产在线播放观看| 日韩视频在线观看一区二区三区| 成人免费无码av| 久色视频在线播放| 精品无码一区二区三区在线| 欧美性受xxxx黒人xyx性爽| 亚洲老女人av| www.超碰97.com| www..com日韩| 99福利在线观看| 久久久一二三四| 成人观看免费完整观看| 又色又爽又高潮免费视频国产| 久久久久久久久久久久久久国产| 久久久精品高清| 800av在线免费观看| 五月天av在线播放| 国产精品探花在线播放| 法国空姐在线观看免费| 国产成人久久婷婷精品流白浆| 日韩国产一级片| 欧美wwwwwww| xxxxxx在线观看| ww国产内射精品后入国产| 国产成人综合一区| 黄色在线视频网| 亚洲天堂av免费在线观看| mm131国产精品| 每日在线观看av| 日本在线播放一区二区| 少妇熟女一区二区| 日本精品一区二区三区四区| 爱情岛论坛vip永久入口| 中文精品无码中文字幕无码专区| 国产黄色一级网站| 欧美性猛交内射兽交老熟妇| 992kp快乐看片永久免费网址| 日韩一二区视频| 男人天堂网视频| 色91精品久久久久久久久| 少妇高潮喷水久久久久久久久久| 亚洲啊啊啊啊啊| 日韩av片在线看| 日本中文字幕影院| 丰满人妻一区二区三区53号 | 老司机午夜av| 亚洲国产精品影视| 人妻av中文系列| 亚洲综合色在线观看| 欧美在线观看成人| 福利视频一二区| 国产美女永久无遮挡| 日本五级黄色片| 亚洲欧美自偷自拍另类| 国产乱子伦精品无码专区| 北条麻妃在线视频观看| av电影一区二区三区| chinese少妇国语对白| 黄色一级视频在线播放| 99热这里只有精品免费| 丁香婷婷综合激情| 97干在线视频| 久久久999视频| 日本精品久久久久中文字幕| 欧美日本视频在线观看| 免费看日本毛片| 日韩精品免费播放| 日本黄色三级大片| 国产高潮免费视频| 最近免费中文字幕中文高清百度| www.69av| 黄色一级二级三级| 欧美在线aaa| 成人国产一区二区三区| 777精品久无码人妻蜜桃| 青青青在线视频免费观看| 青少年xxxxx性开放hg| 日韩av新片网| 午夜两性免费视频| 久久精品国产99久久99久久久| 色一情一区二区三区| 特级黄色片视频| 久久天天东北熟女毛茸茸| ww国产内射精品后入国产| 中文字幕一区久久| 日日橹狠狠爱欧美超碰| 毛片毛片毛片毛片毛| 欧美在线观看www| 国产免费一区二区三区四在线播放| 好吊妞无缓冲视频观看| 天天做天天干天天操| 青青在线视频免费观看| 亚洲国产成人va在线观看麻豆| 色综合色综合色综合色综合| 国产成人艳妇aa视频在线| 青青草av网站| 青青草视频国产| 欧美国产在线一区| 超碰在线公开97| 日韩欧美xxxx| 无码人妻丰满熟妇区96| 成人av在线播放观看| 欧美又黄又嫩大片a级| 亚洲男人天堂色| 日韩av一二三四区| 日韩精品一区在线视频| 天天碰免费视频| 四虎精品欧美一区二区免费| www.久久com| 欧美亚洲国产成人| 国内自拍中文字幕| 97在线免费视频观看| avav在线看| 黄色一级片网址| 国产精品久久久久9999小说| 黄网站色视频免费观看| www.激情网| 成人免费a级片| 欧美日韩理论片| 成年人黄色在线观看| 日韩video| 国产精品一区二区小说| 激情五月六月婷婷|