真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript的var,let和const有什么區(qū)別

本篇內(nèi)容主要講解“JavaScript的var,let和const有什么區(qū)別”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“JavaScript的var,let和const有什么區(qū)別”吧!

為鷹手營子等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及鷹手營子網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、鷹手營子網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!

ES5與ES6的區(qū)別

1. 作用域

使用不同的關(guān)鍵字來聲明變量,主要就是對變量的作用域有不同的限制,因此var和let最主要的區(qū)別就是變量作用域的區(qū)別。

  • var聲明的范圍是函數(shù)作用域,函數(shù)體之外無法訪問到函數(shù)體內(nèi)聲明的var變量。

做題的時候經(jīng)常會有在全局和函數(shù)體內(nèi)聲明同名變量的場景,要知道不同作用域的變量是不會互相干擾的。

var a = 10;
function logA() {
    var a = 20;
    console.log(a); // 20
}
console.log(a); // 10
  • let聲明的范圍是塊作用域,塊作用域是函數(shù)作用域的子集,可以使用花括號{...}來限定塊級作用域。

2. 全局屬性

在全局作用域下使用var和let聲明變量,變量都是會在頁面的聲明周期內(nèi)存續(xù)。

但是使用var聲明的變量會成為window對象的屬性,使用let聲明則不會

3. 變量提升與暫時性死區(qū)

  • var聲明存在變量提升的行為。

變量的聲明、初始化和賦值被分為三步進(jìn)行,對于var變量,聲明和初始化會被提升到作用域的頂部。

也就是說,編譯器在遇到var聲明時,會先在作用域頂部聲明一個var變量并將其初始化為undefined值。

因此在代碼執(zhí)行流遇到var聲明語句之前訪問var變量并不會報錯,而是會訪問到undefined值。

(function example() {
  console.log(age); // undefined
  var age = 20;
})();

// 相當(dāng)于
(function example() {
  var age;
  console.log(age); // undefined
  age = 20;
})();
  • ES6對先訪問后聲明變量的行為做了約束,因此let和const聲明會存在TDZ暫時性死區(qū)。

即JavaScript引擎在編譯時如果遇到let和const聲明,會將它們放入暫時性死區(qū)以阻止訪問,只有在執(zhí)行到變量聲明的語句后,才會將變量從TDZ中移出。

因此如果在變量聲明語句之前訪問變量,相當(dāng)于企圖訪問TDZ中的變量,JavaScript會拋出運(yùn)行時錯誤ReferenceError。

ES5的變量提升和ES6的暫時性死區(qū)的區(qū)別還有一個“副作用”就是改變了typeof操作對于變量的訪問性。

已知在ES5時對于未聲明變量唯一的安全操作是typeof,會返回undefined值。

TDZ的出現(xiàn)導(dǎo)致即使使用typeof,也不能在let和const聲明語句執(zhí)行之前訪問let和const變量,依然會報ReferenceError

4. 重復(fù)聲明

  • var聲明是允許重復(fù)的,可以重復(fù)使用var關(guān)鍵字來聲明同名變量,后來聲明的變量值會覆蓋之前的值。

  • 為了阻止重復(fù)聲明變量這個容易讓人迷惑的行為,ES6限制了let和const聲明的變量都是不可重復(fù)的,如果重復(fù)聲明會報SyntaxError錯誤。

這個限制不僅體現(xiàn)在let聲明對let聲明,如果想用let去重復(fù)聲明var變量也是不被允許的。

let與const的區(qū)別

1. 常量

同樣都是ES6的變量聲明關(guān)鍵字,let和const的區(qū)別就在于使用const聲明創(chuàng)建的是一個值的只讀引用。

只讀引用意味著對于原始值來說,const聲明不可以再重新賦值;

對于引用值來說,const聲明不可以再修改引用,但是可以修改對象的屬性值或者數(shù)組內(nèi)部的值。

最佳實踐

  • 盡量不使用var。因為let和const已經(jīng)可以替代var的位置,滿足開發(fā)需求,順便還規(guī)避了很多不必要的問題。

  • 優(yōu)先使用const聲明,let聲明次之。const聲明有點像保護(hù)變量的機(jī)制,它能預(yù)防和阻止預(yù)期之外的變量修改。 對于有修改需求的變量,就使用let聲明。

到此,相信大家對“JavaScript的var,let和const有什么區(qū)別”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


當(dāng)前題目:JavaScript的var,let和const有什么區(qū)別
網(wǎng)站鏈接:http://weahome.cn/article/jdpipc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部