溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

javascript的var與let,const的區(qū)別是什么

發(fā)布時間:2022-01-04 16:22:05 來源:億速云 閱讀:122 作者:iii 欄目:開發(fā)技術(shù)

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

說到JavaScript中聲明變量的幾種方法也就是var、letconst了,letconstes6中新增的命令。那么它們之間有什么區(qū)別呢?

我們先整體說一下三者的區(qū)別,在詳細(xì)介紹,var、let、const的區(qū)別主要從以下幾點(diǎn)分析:

  • 作為全局變量時的不同

  • 變量提升

  • 暫時性死區(qū)

  • 塊級作用域

  • 重復(fù)聲明

  • 修改聲明的變量

作為全局變量時

ES5中,頂層對象的屬性和全局變量是等價的,用var聲明的變量既是全局變量,也是頂層變量的屬性

但是ES6中用let聲明的變量可以在全局訪問到,但是并沒有在頂層變量的屬性上,const聲明的常量同樣也不會在頂層變量上

javascript的var與let,const的區(qū)別是什么

變量提升

var聲明的變量存在變量提升,及變量可以在聲明之前調(diào)用,值為undefined

letconst不存在變量提升,即它們所聲明的變量一定要在聲明后使用,否則會報(bào)錯

console.log(a)  // undefinedvar a = 1console.log(b)  // Cannot access 'b' before initializationlet b = 2console.log(c)  // Cannot access 'c' before initializationconst c = 3console.log(a)  // undefined
var a = 1

console.log(b)  // Cannot access 'b' before initialization
let b = 2

console.log(c)  // Cannot access 'c' before initialization
const c = 3

暫時性死區(qū)

var不存在暫時性死區(qū)

letconst存在暫時性死區(qū),只有等到聲明變量的那一行代碼被執(zhí)行后,才可以獲取和使用該變量

其實(shí)這一點(diǎn)就是有上一點(diǎn)變量提升延伸而來的區(qū)別。因?yàn)?code>var聲明的變量存在變量提升,在聲明之前使用該變量值為undefined,不會報(bào)錯,所有沒有暫時性死區(qū)。let、const在該作用域開始前后,變量或常量聲明之前使用會報(bào)錯,這一塊區(qū)域也就被稱為暫時性死區(qū)

例同上文:

console.log(a)  // undefined
var a = 1

console.log(b)  // Cannot access 'b' before initialization
let b = 2

console.log(c)  // Cannot access 'c' before initialization
const c = 3

塊級作用域

var不存在塊級作用域

letconst存在塊級作用域

{    var a = 2}console.log(a)  // 2{    let b = 2}console.log(b)  // Uncaught ReferenceError: b is not defined{    const c = 2}console.log(c)  // Uncaught ReferenceError: c is not defined

重復(fù)聲明

var在相同作用域下允許重復(fù)聲明,后面聲明的變量會覆蓋前面的變量聲明

letconst在相同作用域下不允許重復(fù)聲明

var a = 10
var a = 20 // 20

let b = 10
let b = 20 // Identifier 'b' has already been declared

const c = 10
const c = 20 // Identifier 'c' has already been declared

修改聲明的變量(常量與變量聲明)

varlet聲明的是變量,聲明后的變量可被修改

const聲明得失常量,只讀。一旦聲明,常量的值就不能改變。但是需要注意的是,對于引用數(shù)據(jù)類型,JavaScript中的變量或者常量存儲的是該數(shù)據(jù)的存儲地址,只要不直接修改該常量的引用,修改其指向的對象的屬性是可以的。

var a = 10
a = 20
console.log(a)  // 20

let b = 10
b = 20
console.log(b)  // 20

const c = 10
c = 20 // Uncaught TypeError: Assignment to constant variable

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI