最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中var、let和const的區(qū)別與應用具體代碼示例

 更新時間:2026年03月05日 09:33:55   作者:凍梨政哥  
在前端開發(fā)中,var、let 和const是我們經(jīng)常使用的變量聲明關鍵字,它們雖然看起來相似,但實際上有著不同的作用范圍和特性,這篇文章主要介紹了JavaScript中var、let和const的區(qū)別與應用具體代碼示例的相關資料,需要的朋友可以參考下

前言

在 JavaScript 的發(fā)展歷程中,變量聲明方式經(jīng)歷了重要的演變。從最初的var,到 ES6 引入的letconst,每種聲明方式都有其獨特的特性和使用場景。本文將結合具體代碼示例,詳細解析這三種聲明方式的區(qū)別與應用。

1. var 的特性與問題

var是 JavaScript 最早的變量聲明方式,但它存在一些與直覺不符的特性,在現(xiàn)代開發(fā)中已不推薦使用。

// 早期的JS 就用來頁面交互,有一些缺失甚至設計不合理的地方
// 語言精粹, The Good Parts, The Bad Parts
// es5 只有var 聲明變量,沒有常量
var age = 18; // js 弱類型,由值決定
age++;
var PI = 3.1415926; // 變量大寫 約定就不應該改變 編程習慣
console.log(age);

var的主要問題在于變量提升特性:

// var age=18;// undefined
// age = 18; // 賦值
// JS 腳本語言,它的編譯階段和執(zhí)行階段不像Java/C++ 一樣分開的那么清晰
// 編譯階段有,就在代碼執(zhí)行之前的一霎那,var 就變量提升了
// 接下來代碼進入執(zhí)行階段
// 變量提升 不利于代碼的可讀性,應該廢棄的糟粕

變量提升意味著var聲明的變量會在代碼執(zhí)行前被提升到作用域頂部,這可能導致意外的行為和降低代碼可讀性。

2. let 的塊級作用域

ES6 引入的let解決了var的許多問題,其中最關鍵的是引入了塊級作用域

{   // 塊級作用域
    var age=18; // 不支持塊級作用域
    let height = 188; // 支持塊級作用域 最大型項目或高級語言的核心
}

console.log(age); // 輸出18,var聲明的變量在塊級作用域外仍可訪問
console.log(height); // 報錯:ReferenceError: height is not defined

上述代碼中,let聲明的height只在塊級作用域({}內(nèi))有效,在作用域外訪問會拋出ReferenceError。這一特性讓 JavaScript 更符合其他高級編程語言的特性,也更適合大型項目開發(fā)。

let還解決了變量提升的問題,引入了暫時性死區(qū)

// 暫時性死區(qū)
// 在編譯階段的變量提升是為了編譯階段就知道有哪些變量和常量
// let/const + 暫時性死區(qū) 解決了變量提升的問題
let height=188;

let聲明變量之前訪問該變量會拋出ReferenceError: Cannot access '變量名' before initialization,這避免了因變量提升導致的意外行為。

3. const 的常量特性

const用于聲明常量,它具有let的塊級作用域特性,同時還保證變量引用不可更改:

const PI = 3.1415926;
const person={
    name: "nwk",
    age: 20
}
// person = 'hahaha'; // 報錯:TypeError: Assignment to constant variable
person.age=21; // 允許修改對象屬性
console.log(person); // 輸出:{ name: 'nwk', age: 21 }

需要注意的是,const保證的是引用不可變,而非值不可變:

  • 對于簡單數(shù)據(jù)類型(如數(shù)字、字符串),const聲明的變量值不可更改
  • 對于復雜數(shù)據(jù)類型(如對象、數(shù)組),const只保證引用地址不變,但可以修改引用地址中的屬性值

如果需要完全凍結對象,使其屬性也不可修改,可以使用Object.freeze()

const wes = Object.freeze(person); // 凍結對象
console.log(wes);
wes.age = 17; // 嘗試修改凍結對象的屬性,不會生效也不會報錯
console.log(wes); // 輸出:{ name: 'nwk', age: 21 }

4. 函數(shù)提升與作用域

JavaScript 中函數(shù)是一等公民,存在函數(shù)提升現(xiàn)象,與var的變量提升有所不同:

// js 中函數(shù)是一等公民,編譯階段就會進行函數(shù)提升
// 和var 相同的地方都會提升,不同的地方在于var只會提升變量聲明
// 而函數(shù)不只提升聲明,連賦值也一起提升
setWidth(); // 可以在函數(shù)聲明前調(diào)用,因為函數(shù)被完全提升

// 全局作用域
function setWidth(){
    // 函數(shù)作用域 局部
    var width=100;
    { // 塊級作用域
        let a=1;
    }
    console.log(width); // 輸出100
}

setWidth();
// console.log(width); // 報錯:ReferenceError: width is not defined

函數(shù)提升允許在函數(shù)聲明前調(diào)用函數(shù),而var聲明的變量只會提升聲明部分,不會提升賦值。

5. 常見錯誤總結

使用這三種聲明方式時,常見的錯誤包括:

  1. ReferenceError: 變量名 is not defined:在作用域外訪問letconst聲明的變量
  2. TypeError: Assignment to constant variable:嘗試修改const聲明的變量引用
  3. ReferenceError: Cannot access '變量名' before initialization:在暫時性死區(qū)內(nèi)訪問letconst聲明的變量

6. 最佳實踐

  • 優(yōu)先使用const,當確實需要修改變量時使用let
  • 避免使用var,以減少因變量提升和作用域問題導致的錯誤
  • 對于不需要修改的對象,可使用Object.freeze()進行凍結

通過合理使用varletconst,可以寫出更清晰、更可靠的 JavaScript 代碼,尤其在大型項目開發(fā)中,這些特性顯得尤為重要。

到此這篇關于JavaScript中var、let和const的區(qū)別與應用具體代碼示例的文章就介紹到這了,更多相關JS中var、let和const區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • three.js加載obj模型的實例代碼

    three.js加載obj模型的實例代碼

    three.js是一款webGL框架,由于其易用性被廣泛應用。接下來通過本文給大家分享three.js加載obj模型的實例代碼,需要的朋友參考下吧
    2017-11-11
  • UniApp實現(xiàn)頁面跳轉的5種路由方式詳解與實戰(zhàn)對比

    UniApp實現(xiàn)頁面跳轉的5種路由方式詳解與實戰(zhàn)對比

    在 UniApp 開發(fā)中,頁面間的跳轉是最常見的操作之一,UniApp 提供了 5 種路由 API,分別對應不同的跳轉場景,本文將逐一講解 5 種跳轉方式的原理、適用場景與代碼示例,需要的朋友可以參考下
    2026-04-04
  • 淺談javascript的數(shù)據(jù)類型檢測

    淺談javascript的數(shù)據(jù)類型檢測

    剖析一下javascript的數(shù)據(jù)類型。這一次我們只簡單討論下javascript的數(shù)據(jù)類型檢測,繼續(xù)期望大家踴躍發(fā)表意見,尤其歡迎高手拍磚。
    2010-07-07
  • JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解

    JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解

    從 ES2019 中開始引入了一種扁平化數(shù)組的新方法,可以展平任何深度的數(shù)組,這篇文章主要介紹了JavaScript 數(shù)組展平方法: flat() 和 flatMap()詳解,需要的朋友可以參考下
    2023-06-06
  • Javascript中replace()小結

    Javascript中replace()小結

    在javascript中,replace方法是屬于String對象的,可用于替換字符串。今天我們就來詳細探討下一些replace()方法的使用
    2015-09-09
  • 淺談Axios去除重復請求方案

    淺談Axios去除重復請求方案

    本文主要介紹了Axios去除重復請求方案,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • JS測試顯示屏分辨率以及屏幕尺寸的方法

    JS測試顯示屏分辨率以及屏幕尺寸的方法

    如何用JS特效顯示自己的屏幕分辨率以及屏幕尺寸呢,你會嗎?如果不會,那么下面有個不錯的方法,大家可以參考下
    2013-11-11
  • JavaScript中數(shù)組遍歷的7種方法小結

    JavaScript中數(shù)組遍歷的7種方法小結

    作為JavaScript開發(fā)人員,熟悉數(shù)組的遍歷和操作是非常重要的,數(shù)組遍歷是處理和操作數(shù)組元素的基本需求之一,本文將介紹JavaScript中的7種常見數(shù)組遍歷方法,幫助你成為數(shù)組操作的達人
    2023-11-11
  • js實現(xiàn)車輛管理系統(tǒng)

    js實現(xiàn)車輛管理系統(tǒng)

    這篇文章主要為大家詳細介紹了js實現(xiàn)車輛管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • js圖片放大鏡效果實現(xiàn)方法詳解

    js圖片放大鏡效果實現(xiàn)方法詳解

    這篇文章主要為大家詳細介紹了js圖片放大鏡效果的實現(xiàn)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論

朝阳县| 涞源县| 化州市| 惠来县| 卓资县| 富锦市| 大同县| 临西县| 门头沟区| 泗阳县| 吉安市| 德化县| 柳河县| 木里| 隆安县| 珠海市| 宁都县| 三都| 通江县| 灌南县| 华池县| 芒康县| 盐城市| 西宁市| 大方县| 平舆县| 交口县| 安阳县| 马鞍山市| 普洱| 海丰县| 闵行区| 渝北区| 措勤县| 石楼县| 太湖县| 博罗县| 扎囊县| 沙田区| 临海市| 遂昌县|