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

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

es6中l(wèi)et怎么用

在es6中,let關(guān)鍵字用于聲明變量;但是所聲明的變量,只在let命令所在的代碼塊內(nèi)有效。let不會(huì)發(fā)生“變量提升”現(xiàn)象,所以變量一定要在聲明后使用,否則報(bào)錯(cuò)。只要塊級(jí)作用域內(nèi)存在let命令,它所聲明的變量就“綁定”(binding)這個(gè)區(qū)域,不再受外部的影響。

es6中l(wèi)et怎么用

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

es6 let關(guān)鍵字

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

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

上面代碼在代碼塊之中,分別用letvar聲明了兩個(gè)變量。然后在代碼塊之外調(diào)用這兩個(gè)變量,結(jié)果let聲明的變量報(bào)錯(cuò),var聲明的變量返回了正確的值。這表明,let聲明的變量只在它所在的代碼塊有效。

for循環(huán)的計(jì)數(shù)器,就很合適使用let命令。

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

上面代碼中,計(jì)數(shù)器i只在for循環(huán)體內(nèi)有效,在循環(huán)體外引用就會(huì)報(bào)錯(cuò)。

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

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

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

如果使用let,聲明的變量?jī)H在塊級(jí)作用域內(nèi)有效,最后輸出的是6。

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

上面代碼中,變量ilet聲明的,當(dāng)前的i只在本輪循環(huán)有效,所以每一次循環(huán)的i其實(shí)都是一個(gè)新的變量,所以最后輸出的是6。

不存在變量提升

let不像var那樣會(huì)發(fā)生“變量提升”現(xiàn)象。所以,變量一定要在聲明后使用,否則報(bào)錯(cuò)。

console.log(foo); // 輸出undefined console.log(bar); // 報(bào)錯(cuò)ReferenceError  var foo = 2; let bar = 2;
登錄后復(fù)制

上面代碼中,變量foovar命令聲明,會(huì)發(fā)生變量提升,即腳本開(kāi)始運(yùn)行時(shí),變量foo已經(jīng)存在了,但是沒(méi)有值,所以會(huì)輸出undefined。變量barlet命令聲明,不會(huì)發(fā)生變量提升。這表示在聲明它之前,變量bar是不存在的,這時(shí)如果用到它,就會(huì)拋出一個(gè)錯(cuò)誤。

暫時(shí)性死區(qū)

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

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

上面代碼中,存在全局變量tmp,但是塊級(jí)作用域內(nèi)let又聲明了一個(gè)局部變量tmp,導(dǎo)致后者綁定這個(gè)塊級(jí)作用域,所以在let聲明變量前,對(duì)tmp賦值會(huì)報(bào)錯(cuò)。

ES6明確規(guī)定,如果區(qū)塊中存在letconst命令,這個(gè)區(qū)塊對(duì)這些命令聲明的變量,從一開(kāi)始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會(huì)報(bào)錯(cuò)。

總之,在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。這在語(yǔ)法上,稱(chēng)為“暫時(shí)性死區(qū)”(temporal dead zone,簡(jiǎn)稱(chēng)TDZ)。

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

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

“暫時(shí)性死區(qū)”也意味著typeof不再是一個(gè)百分之百安全的操作。

typeof x; // ReferenceError let x;
登錄后復(fù)制

上面代碼中,變量x使用let命令聲明,所以在聲明之前,都屬于x的“死區(qū)”,只要用到該變量就會(huì)報(bào)錯(cuò)。因此,typeof運(yùn)行時(shí)就會(huì)拋出一個(gè)ReferenceError

作為比較,如果一個(gè)變量根本沒(méi)有被聲明,使用typeof反而不會(huì)報(bào)錯(cuò)。

typeof undeclared_variable // "undefined"
登錄后復(fù)制

上面代碼中,undeclared_variable是一個(gè)不存在的變量名,結(jié)果返回“undefined”。所以,在沒(méi)有let之前,typeof運(yùn)算符是百分之百安全的,永遠(yuǎn)不會(huì)報(bào)錯(cuò)。現(xiàn)在這一點(diǎn)不成立了。這樣的設(shè)計(jì)是為了讓大家養(yǎng)成良好的編程習(xí)慣,變量一定要在聲明之后使用,否則就報(bào)錯(cuò)。

有些“死區(qū)”比較隱蔽,不太容易發(fā)現(xiàn)。

function bar(x = y, y = 2) {   return [x, y]; }  bar(); // 報(bào)錯(cuò)
登錄后復(fù)制

上面代碼中,調(diào)用bar函數(shù)之所以報(bào)錯(cuò)(某些實(shí)現(xiàn)可能不報(bào)錯(cuò)),是因?yàn)閰?shù)x默認(rèn)值等于另一個(gè)參數(shù)y,而此時(shí)y還沒(méi)有聲明,屬于”死區(qū)“。如果y的默認(rèn)值是x,就不會(huì)報(bào)錯(cuò),因?yàn)榇藭r(shí)x已經(jīng)聲明了。

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

ES6規(guī)定暫時(shí)性死區(qū)和letconst語(yǔ)句不出現(xiàn)變量提升,主要是為了減少運(yùn)行時(shí)錯(cuò)誤,防止在變量聲明前就使用這個(gè)變量,從而導(dǎo)致意料之外的行為。這樣的錯(cuò)誤在ES5是很常見(jiàn)的,現(xiàn)在有了這種規(guī)定,避免此類(lèi)錯(cuò)誤就很容易了。

總之,暫時(shí)性死區(qū)的本質(zhì)就是,只要一進(jìn)入當(dāng)前作用域,所要使用的變量就已經(jīng)存在了,但是不可獲取,只有等到聲明變量的那一行代碼出現(xiàn),才可以獲取和使用該變量。

不允許重復(fù)聲明

let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量。

// 報(bào)錯(cuò) function () {   let a = 10;   var a = 1; }  // 報(bào)錯(cuò) function () {   let a = 10;   let a = 1; }
登錄后復(fù)制

因此,不能在函數(shù)內(nèi)部重新聲明參數(shù)。

function func(arg) {   let arg; // 報(bào)錯(cuò) }  function func(arg) {   {     let arg; // 不報(bào)錯(cuò)   } }
登錄后復(fù)制

塊級(jí)作用域

為什么需要塊級(jí)作用域?

ES5只有全局作用域和函數(shù)作用域,沒(méi)有塊級(jí)作用域,這帶來(lái)很多不合理的場(chǎng)景。

第一種場(chǎng)景,內(nèi)層變量可能會(huì)覆蓋外層變量。

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

上面代碼中,函數(shù)f執(zhí)行后,輸出結(jié)果為undefined,原因在于變量提升,導(dǎo)致內(nèi)層的tmp變量覆蓋了外層的tmp變量。

第二種場(chǎng)景,用來(lái)計(jì)數(shù)的循環(huán)變量泄露為全局變量。

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

上面代碼中,變量i只用來(lái)控制循環(huán),但是循環(huán)結(jié)束后,它并沒(méi)有消失,泄露成了全局變量。

ES6的塊級(jí)作用域

let實(shí)際上為JavaScript新增了塊級(jí)作用域。

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

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

ES6允許塊級(jí)作用域的任意嵌套。

{{{{{let insane = 'Hello World'}}}}};
登錄后復(fù)制

上面代碼使用了一個(gè)五層的塊級(jí)作用域。外層作用域無(wú)法讀取內(nèi)層作用域的變量。

{{{{   {let insane = 'Hello World'}   console.log(insane); // 報(bào)錯(cuò) }}}};
登錄后復(fù)制

內(nèi)層作用域可以定義外層作用域的同名變量。

{{{{   let insane = 'Hello World';   {let insane = 'Hello World'} }}}};
登錄后復(fù)制

塊級(jí)作用域的出現(xiàn),實(shí)際上使得獲得廣泛應(yīng)用的立即執(zhí)行函數(shù)表達(dá)式(IIFE)不再必要了。

// IIFE 寫(xiě)法 (function () {   var tmp = ...;   ... }());  // 塊級(jí)作用域?qū)懛?{   let tmp = ...;   ... }
登錄后復(fù)制

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
中文字幕永久有效| 国产视频手机在线播放| 日韩av影视大全| 亚洲欧美在线精品| 最新天堂中文在线| 五月天av在线播放| 天天综合成人网| 久国产精品视频| 黄色一级片网址| 日本精品免费视频| 影音先锋成人资源网站| 欧在线一二三四区| 欧美日韩第二页| 国产熟人av一二三区| 国产wwwxx| 性鲍视频在线观看| 97超碰国产精品| 激情综合网俺也去| 黄色aaaaaa| 九色自拍视频在线观看| 黄色动漫在线免费看| 亚洲精品自拍网| 亚洲高潮无码久久| 日韩视频第二页| 国产一区二区在线观看免费视频| 午夜久久久久久久久久久| 黄色成人在线看| 黄色永久免费网站| 成人免费在线网| 中文字幕 91| 女人被男人躁得好爽免费视频| www插插插无码视频网站| 另类小说色综合| 妺妺窝人体色www看人体| 国产免费视频传媒| 97超碰在线视| 亚洲综合av在线播放| 激情小视频网站| 久久久精品高清| 国产一区二区网| 桥本有菜av在线| 国产v亚洲v天堂无码久久久 | 日本欧美黄色片| 国产精品久久久久久久av福利| 国产精品12345| 日韩一二区视频| 亚洲高清视频免费| 欧美性猛交久久久乱大交小说| 精品人妻人人做人人爽| 999热精品视频| 青青青在线视频免费观看| 91成人在线观看喷潮教学| 手机在线视频你懂的| 香蕉视频禁止18| 久草在在线视频| 茄子视频成人免费观看| 免费一级特黄毛片| 国产精品一线二线三线| 超级碰在线观看| 成人一区二区av| 麻豆视频传媒入口| 日韩video| youjizz.com亚洲| 91小视频在线播放| 中文字幕久久av| 污色网站在线观看| 美女网站视频黄色| 久久国产激情视频| 天堂av2020| 中文字幕综合在线观看| japanese在线视频| 五月天婷婷在线观看视频| 成年人网站av| av磁力番号网| 麻豆tv在线播放| 亚欧无线一线二线三线区别| 国产91对白刺激露脸在线观看| 黄色大片中文字幕| 久章草在线视频| 亚洲天堂国产视频| 天天干天天色天天爽| 欧美日韩激情四射| 欧美网站免费观看| 亚洲性图一区二区| 免费观看黄色的网站| 男人天堂新网址| 黄色av免费在线播放| 三级性生活视频| 欧美视频免费看欧美视频| 成年人免费大片| 三级黄色片播放| 大胆欧美熟妇xx| 一区二区在线播放视频| 中文字幕一区二区三区四区五区人| www.日本少妇| 亚洲天堂国产视频| 鲁一鲁一鲁一鲁一澡| www.色就是色.com| 奇米精品一区二区三区| 午夜精品久久久久久久99热影院| 加勒比海盗1在线观看免费国语版| 国产毛片视频网站| 色呦呦网站入口| 不卡av免费在线| 欧美日韩不卡在线视频| 午夜一区二区视频| 黑鬼大战白妞高潮喷白浆| 永久免费在线看片视频| 手机在线看福利| 鲁一鲁一鲁一鲁一澡| 日本a级片在线观看| 香蕉视频禁止18| 国产福利视频在线播放| 日本免费a视频| 老汉色影院首页| 97人人爽人人| 天堂av8在线| 久久久国产欧美| 久久国产色av免费观看| 欧美日韩二三区| 国产96在线 | 亚洲| 青青视频免费在线| 性欧美18一19内谢| 91福利免费观看| 亚洲精品手机在线观看| 亚洲精品乱码久久久久久自慰| 日韩精品在线中文字幕| 日产精品久久久久久久蜜臀| 九一免费在线观看| 8x8x华人在线| 国产在线视频在线| 麻豆tv在线播放| 国产青青在线视频| 国产av无码专区亚洲精品| 欧美二区在线视频| 2022亚洲天堂| 日本爱爱免费视频| 性欧美在线视频| 日日夜夜精品视频免费观看| www.桃色.com| 国产欧美123| 免费欧美一级视频| 婷婷免费在线观看| 日韩av影视大全| 欧美狂野激情性xxxx在线观| 一二三四视频社区在线| 日本精品久久久久中文字幕| 亚洲色图 在线视频| 在线一区二区不卡| 中国丰满熟妇xxxx性| 成人羞羞国产免费网站| 国产欧美精品一二三| 天堂8在线天堂资源bt| 国产成人无码一二三区视频| 久久99999| 国产一区二区三区小说| 国产精彩免费视频| 色哺乳xxxxhd奶水米仓惠香| jizzjizz国产精品喷水| 岛国毛片在线播放| 久久视频这里有精品| 最新天堂中文在线| 男人添女人荫蒂免费视频| 欧美精品aaaa| 日本a在线天堂| aaaaaa亚洲| 国产小视频免费| 欧美精品第三页| 污视频在线观看免费网站| 欧美亚洲黄色片| 国产欧美激情视频| jizzjizzxxxx| 青青在线免费视频| 日韩av片网站| 久久国产精品网| 日本高清xxxx| 高清一区在线观看| 免费一级特黄毛片| 最近免费观看高清韩国日本大全| 欧美精品一区二区三区免费播放| 日本道在线视频| 中文字幕视频三区| 国产激情在线观看视频| 精品久久一二三| 可以免费看的黄色网址| 色综合天天色综合| 虎白女粉嫩尤物福利视频| 欧美成人精品免费| 国产在线观看欧美| 亚洲第一综合网站| 中文字幕一区二区三区四| 手机在线成人免费视频| 粉嫩虎白女毛片人体| 精品无码一区二区三区在线| 欧美a级免费视频| 成人国产一区二区三区| 国产a级黄色大片| 伊人久久在线观看| 国产成a人亚洲精v品在线观看| 香港三级日本三级a视频|