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

首頁 > 編程 > JavaScript > 正文

JavaScript ES6中const、let與var的對(duì)比詳解

2019-11-19 16:18:53
字體:
供稿:網(wǎng)友

ECMAScript 6 新增 const 和 let 命令,用來聲明變量。

聲明方式 變量提升 作用域 初始值 重復(fù)定義
const 塊級(jí) 需要 不允許
let 塊級(jí) 不需要 不允許
var 函數(shù)級(jí) 不需要 允許

變量提升:const 和 let 必須先聲明再使用,不支持變量提升

console.log(c1, l1, v1);// 報(bào)錯(cuò)// Uncaught ReferenceError: c1 is not defined const c1 = 'c1';let l1 = 'l1';var v1 = 'v1';

作用域:const,let 支持塊級(jí)作用域,有效避免變量覆蓋

const c21 = 'c21';let l21 = 'l21';var v21 = 'v21'; if (0.1 + 0.2 != 0.3) { const c21 = 'c22'; let l21 = 'l22'; var v21 = 'v22';  console.log(c21, l21, v21); // 輸出 c22 l22 v22} console.log(c21, l21, v21);// 輸出 c21 l21 v22

塊級(jí)作用域,在外層不能直接訪問內(nèi)層變量

if (0.1 + 0.2 != 0.3) { const c22 = 'c22'; let l22 = 'l22'; var v22 = 'v22';  console.log(c22, l22, v22); // 輸出 c22 l22 v22} console.log(c22, l22, v22);// 報(bào)錯(cuò)// Uncaught ReferenceError: c22 is not defined// 同樣地, l22 is not defined

const 定義常量,該常量不能賦值,但該常量的屬性可以賦值

const c231 = {};const c232 = []; c231.name = 'seven';c232.push(27); console.log(c231, c232);// 輸出 {name: "seven"} [27] // 禁止給對(duì)象賦值,應(yīng)該使用 Object.freeze const c233 = Object.freeze({});const c234 = Object.freeze([]); c233.name = 'seven';// 普通模式下不報(bào)錯(cuò)// 嚴(yán)格模式下報(bào)錯(cuò)// Uncaught TypeError: Cannot add property name, object is not extensible  c234.push(27);// 普通模式下就會(huì)報(bào)錯(cuò)// Uncaught TypeError: Cannot add property 0, object is not extensible console.log(c233, c234);// 輸出 {} []

全局變量不再設(shè)置為頂層對(duì)象(window)的屬性,有效避免全局變量污染

const c24 = 'c24';let l24 = 'l24'; console.log(c24, l24);// 輸出 c24 l24 console.log(window.c24, window.l24);// 輸出 undefined undefined

符合預(yù)期的 for 循環(huán)

for (var i = 0; i != 3; i++) { setTimeout(function() {  console.log(i); },10);}// 依次打印for (let i = 0; i != 3; i++) { setTimeout(function() {  console.log(i); },10);}// 依次打印,為啥呢

可以看到在 for 循環(huán)中使用 let 方式聲明變量才是符合預(yù)期。

在 for 中每一次循環(huán),let 都是重新聲明變量,并且因?yàn)?JavaScript 引擎會(huì)記住上一次循環(huán)的值,初始化 i 時(shí)在上一輪的基礎(chǔ)上計(jì)算。

可以看到在 for 循環(huán)中至少有兩層作用域,看下面的例子更容易理解。

for (let i = 0; i != 3; i++) { let i = 'seven'; console.log(i);}console.log('eight');// 依次打印sevensevenseveneight

初始值:const 聲明的變量必須設(shè)置初始值,且不能重復(fù)賦值。

const c3 = 'c3';let l3 = 'l3';var v3 = 'v3'; console.log(c3, l3, v3);// 輸出 c3 l3 v3 c3 = 2; // Uncaught TypeError: Assignment to constant variablel3 = 2;v3 = 2; console.log(c3, l3, v3);// 輸出 c3 2 2 const c32;// 報(bào)錯(cuò)// Uncaught SyntaxError: Missing initializer in const declaration

重復(fù)定義:const 和 let 不支持重復(fù)定義

const、let 縮小了變量作用域,完美避免變量污染;const 固定變量(即固定變量類型),對(duì)于弱類型 JavaScript 來說,可以明顯提升性能。推薦在應(yīng)用中使用 const、let 聲明變量。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)武林網(wǎng)的支持。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄂温| 蛟河市| 天门市| 双牌县| 金华市| 邛崃市| 贵德县| 会东县| 泰安市| 沽源县| 阜阳市| 共和县| 木兰县| 邵阳市| 阳西县| 江都市| 雷州市| 长治县| 临高县| 南汇区| 抚顺市| 庆安县| 蒲城县| 海安县| 探索| 北宁市| 哈尔滨市| 白银市| 航空| 定州市| 时尚| 台中市| 嵩明县| 上饶县| 台前县| 东海县| 泰顺县| 南部县| 和平区| 马公市| 获嘉县|