日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

说说 ES6 的 let 指令

發布時間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 说说 ES6 的 let 指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

let 指令用法類似于 var,也是用來聲明變量 ,但是它所聲明的變量,只能在 let 指令所在的代碼塊內有效 。

{let a = 1;var b = 1; }console.log(b); console.log(a); 復制代碼

運行結果:

1 console.log(a);^ReferenceError: a is not defined 復制代碼

此例中, b 會打印出結果。但 a 因為是使用 let 命令聲明的變量,所以只在它所在的代碼塊內有效。

1 應用場景

let 指令適用于 for 循環變量聲明。在 ES6 之前,我們使用 var 指令來聲明變量,可能存在一些問題,請看下面的示例:

var a = []; for (var i = 0; i < 3; i++) {a[i] = function () {console.log(i);}; } a[0]() a[2]() 復制代碼

運行結果:

3 3

變量 i 是 var 聲明的,所以它在全局范圍內都有效 。 所以在每一次循環中,新的 i 值都會覆蓋舊值,導致最后 a 中的所有函數,輸出的都是最后一輪的 i 的值 。

使用 let 指令,就能夠避免上述問題:

var a = []; for (let i = 0; i < 3; i++) {a[i] = function () {console.log(i);}; } a[0]() a[2]() 復制代碼

運行結果:

0 2

注意: for 循環內部,設置循環變量是一個作用域,而循環體內部是另一個作用域:

for (let i = 0; i < 3; i++) {let i = 10;console.log(i) } 復制代碼

運行結果:

10 10 10

2 變量不提升

var 會發生 “ 變量提升 ” 現象,即 var 聲明的變量,可以在聲明之前使用。 但 let 聲明的變量,一定要在聲明之后使用,這種設計,讓 JS 變得更加規范。變量在聲明后,才能使用。

//var 變量提升 console.log('j='+j); var j = 1;//let 變量不會提升 console.log('k='+k); let k = 1; 復制代碼

運行結果:

j=undefined ReferenceError: k is not defined

3 暫時性死區

只要塊級作用域內,存在 let 指令,那么它所聲明的變量不會再受外部影響,所以稱為暫時性死區(temporal dead zone)。

var str = 1; if (true) {str = 'a';let str; } 復制代碼

運行結果:

ReferenceError: str is not defined

ES6 中,如果代碼塊內存在 let 或 const 指令聲明的變量,那么這些變量從一開始就會形成封閉作用域 。 凡在聲明之前使用這些變量,就會拋出 ReferenceError。

3.1 對 typeof 的影響

暫時性死區甚至會影響到 typeof 操作符:

if(true){console.log('y 類型:'+typeof y);console.log('x 類型:'+typeof x);let x; } 復制代碼

運行結果:

y 類型:undefined ReferenceError: x is not defined

這個示例,變量 x 使用 let 指令聲明,所以在聲明之前,都屬于 x 的暫時性死區 ,因此拋出了 ReferenceError 。

3.2 隱蔽的死區

請看這個示例:

function test(x = y, y = 1) {return x + y; } test(); 復制代碼

運行結果:

ReferenceError: y is not defined

函數的入參 x,它的默認值等于另一個入參 y ,而此時 y 還未聲明,所以會拋出 ReferenceError。

只要聲明了所有的入參,就可以讓這個函數正確運行:

function test2(y = 1,x = y ) {return x + y; } console.log(test2()); 復制代碼

運行結果:

2


暫時性死區的設定,可以有效地減少運行時錯誤。它的本質是:在當前作用域下,只有聲明了變量,才可以使用它。

4 拒絕重復聲明

let 指令,在相同作用域內,同一個變量只能被聲明一次。

if(true){let a = 1;var a = 2; } 復制代碼

運行結果:

SyntaxError: Identifier 'a' has already been declared

if(true){let a = 1;let a = 2; } 復制代碼

運行結果與上例相同。

這樣的限制,也約束了函數的入參聲明:

function test(a) {let a = 2;console.log(a); }test(1); 復制代碼

運行結果:

SyntaxError: Identifier 'a' has already been declared

但我們可以在函數內部,加入塊級作用域,來繞開這一限制:

function test(a) {{let a = 2;console.log(a);} }test(1); 復制代碼

運行結果:

2

轉載于:https://juejin.im/post/5d060c4ff265da1bb47d633a

總結

以上是生活随笔為你收集整理的说说 ES6 的 let 指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩少妇内射免费播放18禁裸乳 | 邵氏电影《金莲外传2》免费观看 | 欧美一区二区高清 | aa视频网站 | 亚洲成人天堂 | 国产免费视频一区二区三区 | 91成人在线观看喷潮动漫 | 男男play视频 | 国产精品九九九九九 | 中国字幕一色哟哟 | www.猫咪av| 思思精品视频 | 久久超碰av | 最新欧美日韩 | 黄网址在线观看 | 亚洲国产精品女人久久久 | 成人午夜视频免费观看 | 中文字幕第十二页 | 波多野结衣av无码 | 欧美做爰全过程免费观看 | 韩日视频一区 | 久久aaa| 涩涩视屏| 激情爱爱网 | 久久久蜜桃一区二区人 | 日韩毛片无码永久免费看 | 天天插天天色 | 欧美日韩国 | 男女天堂av | 人人射视频| 欧美极品在线视频 | 日本美女性生活视频 | 久久精品6 | 在线不卡视频 | 亚洲aaa视频 | 夜av| 欧美亚洲综合一区 | 色天天av | 亲子乱对白乱都乱了 | 国产小视频免费在线观看 | 男人操女人逼逼视频 | 国产精品av一区 | 日本妇乱大交xxxxx | 色一情一伦一子一伦一区 | 亚洲视频一二三区 | 婷婷一区二区三区四区 | 一区二区三区欧美精品 | 国产精品久久久 | 福利视频在线免费观看 | 午夜黄色小视频 | 日韩美女一区二区三区 | www四虎| 成人自拍视频在线 | 欧美日韩国产免费观看 | 丝瓜色版 | 手机av免费在线 | 无码精品国产一区二区三区 | 五月天婷婷在线播放 | 国产精品美女一区二区 | 91亚洲网站 | 91国偷自产中文字幕久久 | 伊人av综合 | 一个色亚洲 | 一区二区视频国产 | 四虎永久免费在线观看 | 日皮毛片| 玖玖玖在线观看 | 男女男网站 | 美女被c出白浆 | 色撸撸在线 | 国产欧美日韩中文字幕 | 久久艹伊人 | 99国产精品久久久久99打野战 | 亚洲精品鲁一鲁一区二区三区 | 波多野结衣爱爱 | 日韩视频在线免费 | 欧美aaa视频| 色伊人 | 国产91一区二区三区 | www.国产一区二区三区 | 在线观看国产精品视频 | 日本羞羞网站 | 亚洲熟女www一区二区三区 | 成年人的视频网站 | 国产亚洲精品熟女国产成人 | 黄色片免费在线观看 | 久久久久成人精品无码中文字幕 | 咪咪色影院 | 午夜色网 | 伊人亚洲影院 | www.五月.com| 成人网在线看 | 欧美人吸奶水吃奶水 | 青青青在线视频观看 | 欧美日韩精品在线播放 | 欧美破处女 | 中文字幕色站 | 亚洲国产精品视频在线观看 | 天堂福利在线 |