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

首頁 > 開發(fā) > JS > 正文

詳解js中l(wèi)et與var聲明變量的區(qū)別

2024-05-06 16:51:03
字體:
供稿:網(wǎng)友

ES6 新增了let命令,用來聲明局部變量,所聲明的變量,只在let命令所在的代碼塊內(nèi)有效,而且有暫時(shí)性死區(qū)的約束。

1.ES6可以用let定義塊級作用域變量

代碼如下:

function f1(){    {      var a = 10;      let b = 20;    }    console.log(a);  // 10    console.log(b);  // Uncaught ReferenceError: b is not defined  }  f1();

說明:在ES6之前只有全局作用域和函數(shù)作用域,在ES6中新增了塊級作用域,用{}花括號表示。var 聲明的變量a在花括號外面仍然是會起作用的,但是let聲明的變量b只有在花括號里面才會起作用的,在塊級作用域內(nèi)。

2.let配合for循環(huán)的獨(dú)特應(yīng)用

代碼如下:

 function f2(){    var i = 5;    for(var i=0;i<=10;i++){    }    console.log(i);  // 11    var j = 5;    for(let j=0;j<=10;j++){    }    console.log(j); // 5  }  f2();

說明:let非常適合用于for循環(huán)內(nèi)部的塊級作用域,在for循環(huán)當(dāng)中,每一次的執(zhí)行都是一個全新的獨(dú)立的塊級作用域。使用let聲明的變量在for循環(huán)當(dāng)中不會受到循環(huán)體外面的影響,不會受到變量污染,不會發(fā)生改變。對于var聲明的變量i會受到for循環(huán)的影響,受到變量污染,而let聲明的變量j不會受到for循環(huán)的影響。

3.let沒有變量提升與暫時(shí)性死區(qū)

代碼如下:

 function f3(){    // 變量提升    function f31(){      console.log(a); // undefined      var a = 10;      console.log(b); // Uncaught ReferenceError: b is not defined      let b = 10;    }    f31();

說明:在ES6中,如果區(qū)塊中存在let和const命令,這個區(qū)塊對這些命令聲明的變量,從一開始就形成了封閉作用域。凡是在聲明之前就使用這些變量,就會報(bào)錯。暫時(shí)性死區(qū)(TDZ):在代碼塊內(nèi),使用let命令聲明變量之前,該變量都是不可用的。在f31函數(shù)中,用var聲明的變量a發(fā)生了變量提升,打印出的值為undefined 未定義,而用let聲明的變量b報(bào)錯Uncaught ReferenceError,不會發(fā)生變量提升。在f32函數(shù)中,用使用let命令聲明的變量a之前,都屬于變量a的暫時(shí)性死區(qū),形成封閉作用域,該變量都是不可用的,會報(bào)錯,Uncaught ReferenceError: a is not defined。在let聲明變量后,它是一個未定義的變量。當(dāng)再給變量a進(jìn)行賦值操作以后,它的值可以正常打印出來。

4.let變量不能重復(fù)聲明

代碼如下:

function f4(){    let a = 10;    let a = 20;    console.log(a); // Uncaught SyntaxError: Identifier 'a' has already been declared    let b = 10;    var b = 20;    console.log(b); // Uncaught SyntaxError: Identifier 'b' has already been declared  }  f4();

說明:let不允許在相同作用域內(nèi),重復(fù)聲明同一個變量,否則報(bào)錯。在函數(shù)f4中,無論是用兩個let聲明同一個變量a,還是一個let聲明變量b和一個var聲明變量b,都是會報(bào)錯的,Uncaught SyntaxError: Identifier ‘a' has already been declared 和 Uncaught SyntaxError: Identifier ‘b' has already been declared , 所以不能夠重復(fù)聲明同一個變量。

以上所述是小編給大家介紹的let與var聲明變量區(qū)別詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沁阳市| 资源县| 高安市| 河津市| 津南区| 武安市| 吴川市| 东光县| 安岳县| 偃师市| 阆中市| 塔城市| 青浦区| 闻喜县| 比如县| 衡南县| 诸城市| 昌平区| 大埔县| 兴隆县| 博白县| 清流县| 江北区| 乌拉特前旗| 宁波市| 祥云县| 秦皇岛市| 花莲市| 土默特左旗| 横山县| 灵寿县| 江油市| 甘谷县| 嘉峪关市| 广平县| 将乐县| 织金县| 宜兰县| 宁安市| 虞城县| 临泽县|