国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

es6中let和const的使用方法詳解

2024-05-06 15:44:49
字體:
來源:轉載
供稿:網友

本文實例講述了es6中let和const的使用方法。分享給大家供大家參考,具體如下:

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

{ let a = 10; var b = 1;}a // ReferenceError: a is not defined.b // 1

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

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

for (let i = 0; i < 10; i++) { // ...}console.log(i);

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

//下面的代碼如果使用var,最后輸出的是10。var a = [];for (var i = 0; i < 10; i++) { a[i] = function () {  console.log(i); };}a[6](); // 10

上面代碼中,變量i是var命令聲明的,在全局范圍內都有效,所以全局只有一個變量i。每一次循環,變量i的值都會發生改變,而循環內被賦給數組a的函數內部的console.log(i),里面的i指向的就是全局的i。也就是說,所有數組a的成員里面的i,指向的都是同一個i,導致運行時輸出的是最后一輪的i的值,也就是 10。

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

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

上面代碼中,變量i是let聲明的,當前的i只在本輪循環有效,所以每一次循環的i其實都是一個新的變量,所以最后輸出的是6。你可能會問,如果每一輪循環的變量i都是重新聲明的,那它怎么知道上一輪循環的值,從而計算出本輪循環的值?這是因為 JavaScript 引擎內部會記住上一輪循環的值,初始化本輪的變量i時,就在上一輪循環的基礎上進行計算。

不存在變量提升

var命令會發生“變量提升”現象,即變量可以在聲明之前使用,值為undefined。這種現象多多少少是有些奇怪的,按照一般的邏輯,變量應該在聲明語句之后才可以使用。

為了糾正這種現象,let命令改變了語法行為,它所聲明的變量一定要在聲明后使用,否則報錯。

// var 的情況console.log(foo); // 輸出undefinedvar foo = 2;// let 的情況console.log(bar); // 報錯ReferenceErrorlet bar = 2;

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 小金县| 双柏县| 大洼县| 宁化县| 甘肃省| 资源县| 泌阳县| 哈巴河县| 韩城市| 蕉岭县| 和顺县| 溧阳市| 凯里市| 沙坪坝区| 合阳县| 团风县| 东丽区| 密云县| 石渠县| 济南市| 武冈市| 固原市| 贺州市| 繁昌县| 普洱| 安庆市| 青阳县| 汕尾市| 东丽区| 安乡县| 雷波县| 永修县| 麻城市| 菏泽市| 根河市| 霸州市| 资中县| 乌兰察布市| 同心县| 余姚市| 黄石市|