ES6中var、let、const、塊級作用域以及暫存死區(qū)是什么-創(chuàng)新互聯(lián)

這篇文章將為大家詳細講解有關(guān)ES6中var、let、const、塊級作用域以及暫存死區(qū)是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

我們提供的服務(wù)有:做網(wǎng)站、成都做網(wǎng)站、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、鼎城ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的鼎城網(wǎng)站制作公司var

語法

var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

使用

var a, b=2 // 聲明多個變量,可以賦值,也可以不賦值
a=1 // 先聲明,再賦值

var變量提升

使用var聲明的變量將會被提升到函數(shù)的頂部

console.log(a) // undefined
var a =2  
console.log(a) // 2
console.log(b) //Uncaught ReferenceError: b is not defined...

以上代碼相當于

var a
console.log(a) // undefined
a=2
console.log(a) // 2
console.log(b) //Uncaught ReferenceError: b is not defined...
0x002 let

語法

let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]];

使用

let a, b = 2 // 聲明多個變量,賦值不賦值無所謂
a = 2 // 聲明之后再賦值

不再提升

console.log(a) // Uncaught ReferenceError: a is not defined...
let a=1

注意:猜測, 使用babel翻譯一下代碼發(fā)現(xiàn),只是let變成了var,所以使用babel轉(zhuǎn)義之后的代碼依舊會提升

不能重復(fù)聲明

let a=1
let a=2 // Uncaught SyntaxError: Identifier 'a' has already been declared
const

語言

const name1 = value1 [, name2 = value2 [, ... [, nameN = valueN]]];

使用

const a=1, b=2 // 不能省略的值

不能省略的值

const c // Uncaught SyntaxError: Missing initializer in const declaration

不能重復(fù)賦值

const d=4
d=5 // Uncaught TypeError: Assignment to constant variable.

可以修改的引用

const e=[]
e[0]=0
console.log(e) //[0]
塊級作用域

塊級作用域是隨著let、const而來最有用的特性了,在之前的js中,js的作用域是函數(shù)級的,由此帶來的幾個臭名昭著的問題:

意外被修改的值

function varTest() {
  var x = 1;
  if (true) {
    var x = 2;  // 同樣的變量!
    console.log(x);  // 2
  }
  console.log(x);  // 2
}

可以使用let避免了

function letTest() {
  let x = 1;
  if (true) {
    let x = 2;  // 不同的變量
    console.log(x);  // 2
  }
  console.log(x);  // 1
}

萬惡的for循環(huán)和點擊事件

var list = document.getElementById("list");

for (var i = 0; i < 5; i++) {
  var item = document.createElement("LI");
  item.appendChild(document.createTextNode("Item " + i));

  item.onclick = function (ev) {
    console.log("Item " +i + " is clicked.");
  };
  list.appendChild(item);
}
console.log(i) // 5

如果點擊上面,不管點擊哪個,顯示出來的都是Item 5 is clicked.,雖然可以使用閉包解決,但是現(xiàn)在有了更好的方案

let list = document.getElementById("list");

for (let i = 0; i < 5; i++) {
  let item = document.createElement("LI");
  item.appendChild(document.createTextNode("Item " + i));

  item.onclick = function (ev) {
    console.log("Item " +i + " is clicked.");
  };
  list.appendChild(item);
}
作用域規(guī)則很簡單

{}塊內(nèi)形成一個作用域,包括if、else、while、class、do...while、{}、function

{
    const f=6
}
console.log(f) // Uncaught ReferenceError: f is not defined

for循環(huán)中用let聲明一個初始因子,該因子在每個循環(huán)內(nèi)都是一個新的作用域

for (let i = 0; i < 10; i++) {
  console.log(i);
}
console.log(i) // Uncaught ReferenceError: i is not defined

switch只有一個作用域

switch (x) {
  case 0:
    let foo;
    break;
    
  case 1:
    let foo; 
    break;
}
// Uncaught SyntaxError: Identifier 'foo' has already been declared
暫存死區(qū)-Temporal Dead Zone-TDZ

隨著let和const的引入,也引入了暫存死區(qū)的概念。使用var的時候,作用域內(nèi)(函數(shù)作用域),在還沒使用var聲明一個變量的時候,訪問該變量,將會獲得undefined。但是如果使用let,作用域(塊級作用域)內(nèi),在還沒使用let聲明一個變量的時候,訪問該變量,將會獲得ReferenceError,從作用域開始到let語句之間,就是暫存死區(qū)。

{
 console.log(a) // Uncaught ReferenceError: a is not defined
 console.log(b) // Uncaught ReferenceError: b is not defined
 console.log(c) // undefined
 // 暫存死區(qū)
 let a =1
 const b=2
 var c=3
}

注意:猜測, 使用babel翻譯一下代碼發(fā)現(xiàn),只是let變成了var,所以使用babel轉(zhuǎn)義之后可能不存在暫存死區(qū)

關(guān)于ES6中var、let、const、塊級作用域以及暫存死區(qū)是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

名稱欄目:ES6中var、let、const、塊級作用域以及暫存死區(qū)是什么-創(chuàng)新互聯(lián)
當前路徑:http://m.kartarina.com/article6/dicsog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站策劃響應(yīng)式網(wǎng)站、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
主站蜘蛛池模板: 国产在线拍偷自揄拍无码| 一本色道无码不卡在线观看| 手机永久无码国产AV毛片 | 亚洲AV无码一区二区二三区入口| 精品无人区无码乱码大片国产| 一本大道无码人妻精品专区| 亚洲av无码不卡| 亚洲人成无码久久电影网站| 亚洲成av人片不卡无码| 精品亚洲成α人无码成α在线观看| 亚洲va中文字幕无码久久不卡| 无码人妻丰满熟妇区BBBBXXXX | 无码人妻精品一区二区在线视频 | 国产色无码精品视频国产| 四虎影视无码永久免费| 无码专区永久免费AV网站| 午夜不卡无码中文字幕影院| 日韩av无码中文无码电影| 国产人成无码视频在线观看 | 无码人妻一区二区三区在线视频| 亚洲AV无码国产一区二区三区| 黄桃AV无码免费一区二区三区| 亚洲AV无码精品无码麻豆| 久久久人妻精品无码一区| 国产精品无码av天天爽| 日韩放荡少妇无码视频| 亚洲AV综合色区无码一二三区| 亚洲日韩中文无码久久| 中文字幕无码精品亚洲资源网| 熟妇人妻无码中文字幕老熟妇 | 麻豆亚洲AV永久无码精品久久| 天堂无码久久综合东京热| av色欲无码人妻中文字幕| 国产精品白浆无码流出| 成人免费无码视频在线网站| 加勒比无码一区二区三区| 一区二区三区无码高清| 精品无码久久久久久久动漫 | 国产综合无码一区二区三区| 日韩无码系列综合区| 狠狠躁狠狠躁东京热无码专区 |