javascript的var與let,const之間的區(qū)別詳解
說到JavaScript中聲明變量的幾種方法也就是var、let、const了,let和const是es6中新增的命令。那么它們之間有什么區(qū)別呢?
我們先整體說一下三者的區(qū)別,在詳細介紹,var、let、const的區(qū)別主要從以下幾點分析:
- 作為全局變量時的不同
- 變量提升
- 暫時性死區(qū)
- 塊級作用域
- 重復聲明
- 修改聲明的變量
作為全局變量時
在ES5中,頂層對象的屬性和全局變量是等價的,用var聲明的變量既是全局變量,也是頂層變量的屬性
但是ES6中用let聲明的變量可以在全局訪問到,但是并沒有在頂層變量的屬性上,const聲明的常量同樣也不會在頂層變量上

變量提升
var聲明的變量存在變量提升,及變量可以在聲明之前調(diào)用,值為undefined
let和const不存在變量提升,即它們所聲明的變量一定要在聲明后使用,否則會報錯
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ū)
let和const存在暫時性死區(qū),只有等到聲明變量的那一行代碼被執(zhí)行后,才可以獲取和使用該變量
其實這一點就是有上一點變量提升延伸而來的區(qū)別。因為var聲明的變量存在變量提升,在聲明之前使用該變量值為undefined,不會報錯,所有沒有暫時性死區(qū)。let、const在該作用域開始前后,變量或常量聲明之前使用會報錯,這一塊區(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不存在塊級作用域
let和const存在塊級作用域
{ 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重復聲明
var在相同作用域下允許重復聲明,后面聲明的變量會覆蓋前面的變量聲明
let、const在相同作用域下不允許重復聲明
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
修改聲明的變量(常量與變量聲明)
var和let聲明的是變量,聲明后的變量可被修改
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
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
- javascript中的var、let、const最佳實踐
- js中var,let,const的區(qū)別及相關面試題講解
- JavaScript中var、let和const的用法及區(qū)別詳解
- javascript中定義變量const和var有什么區(qū)別詳解
- js中var、let、const之間的區(qū)別
- Js中var,let,const的區(qū)別你知道嗎
- JavaScript變量中var,let和const的區(qū)別
- 淺談JS中var,let和const的區(qū)別
- javascript?變量聲明?var,let,const?的區(qū)別
- 面試官常問之說說js中var、let、const的區(qū)別
- JavaScript?ES6語法中l(wèi)et,const?,var?的區(qū)別
- JavaScript中const和var的區(qū)別小結(jié)
相關文章
AngularJS+Bootstrap實現(xiàn)多文件上傳與管理
這篇文章主要為大家詳細介紹了AngularJS+Bootstrap實現(xiàn)多文件上傳與管理,對上傳文件進行加載與刪除操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-11-11
Javascript中Fetch請求Coze API并流式展示請求結(jié)果
文章介紹了如何使用Fetch API處理CozeAPI返回的流式響應,并在前端進行實時展示,文章提供了處理流式響應的步驟和示例代碼,包括使用fetch發(fā)起POST請求、讀取響應體流、逐步處理數(shù)據(jù)塊以及更新UI,感興趣的朋友一起看看吧2025-02-02
JSP中使用JavaScript動態(tài)插入刪除輸入框?qū)崿F(xiàn)代碼
這篇文章主要介紹了JSP中如何使用JavaScript動態(tài)插入刪除輸入框,需要的朋友可以參考下2014-06-06

