亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript中關(guān)鍵字?var、let、const的區(qū)別詳解

 更新時間:2023年08月09日 08:27:16   作者:cbzone  
在JavaScript中,var、let和const是用于聲明變量的關(guān)鍵字,它們之間存在一些區(qū)別,這篇文章就給大家詳細(xì)介紹一下它們之間的區(qū)別,文章通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
#編程語言/JavaScript 

思維導(dǎo)圖:

一 . var關(guān)鍵字

在 ES5 及之前的版本中,JavaScript 使用  var  關(guān)鍵字聲明變量。以下是  var  的用法:

var x = 10;

  • var  聲明的變量具有函數(shù)作用域,它在聲明它的函數(shù)內(nèi)部有效,如果在函數(shù)外部聲明,它會成為全局變量。
  • 變量提升:使用  var  聲明的變量會被提升到其所在作用域的頂部。這意味著你可以在變量聲明之前訪問它,但它的值會是  undefined 。
  • 可重復(fù)聲明:使用  var  可以多次聲明同一個變量,而不會引發(fā)錯誤。
function example() {
  var x = 10;
  if (true) {
    var x = 20; // 同一個變量 x 被重新賦值
    console.log(x); // 輸出 20
  }
  console.log(x); // 輸出 20
}
example();

在上面的示例中,內(nèi)部的  var x = 20  重新賦值了外部的  var x = 10 。這是因為  var  聲明的變量沒有塊級作用域,所以兩個聲明實際上是同一個變量。

二 . let關(guān)鍵字

ES6 引入了  let  關(guān)鍵字,用于聲明塊級作用域的變量。以下是  let  的用法:

let x = 10;
  • let  聲明的變量具有塊級作用域,它在包含它的塊級作用域內(nèi)有效。塊級作用域可以是函數(shù)、 if  語句、 for  循環(huán)等。
  • 不會變量提升:使用  let  聲明的變量不會被提升到作用域頂部。在聲明之前訪問  let  變量會導(dǎo)致引用錯誤。
  • 不可重復(fù)聲明:在同一個作用域內(nèi)重復(fù)使用  let  聲明同一個變量會引發(fā)錯誤。
function example() {
  let x = 10;
  if (true) {
    let x = 20; // 不同作用域的不同變量 x
    console.log(x); // 輸出 20
  }
  console.log(x); // 輸出 10
}
example();

在上面的示例中,內(nèi)部的  let x = 20  聲明的變量和外部的  let x = 10  是兩個不同的變量,因為它們在不同的塊級作用域中。

三 . const關(guān)鍵字

const  關(guān)鍵字也是在 ES6 中引入的,用于聲明常量。以下是  const  的用法:

const x = 10;
  • const  聲明的變量也具有塊級作用域。
  • const  聲明的變量必須進(jìn)行初始化,并且不能重新賦值給其他值。
  • 對于基本類型(如數(shù)字、字符串),其值是不可變的。
  • 對于對象和數(shù)組, const  聲明的變量是對對象或數(shù)組的引用不可變,但對象或數(shù)組內(nèi)部的屬性可以被修改。
const x = 10;
x = 20; // 錯誤,不能重新賦值給 x
const obj = { name: "John" };
obj.name = "Jane"; // 可以修改對象屬性
obj.age = 25; // 可以添加對象屬性
console.log(obj); // 輸出 { name: 'Jane', age: 25 }

在上面的示例中, const  聲明的  x  不能被重新賦值,而  obj  對象的屬性可以被修改和添加,但是不能對  obj  進(jìn)行重新賦值。

四 . 總結(jié):

  • 使用  var  聲明變量具有函數(shù)作用域和變量提升的特性。
  • 使用  let  聲明變量具有塊級作用域,不會變量提升,并且不可重復(fù)聲明。
  • 使用  const  聲明常量具有塊級作用域,不能重新賦值,并且對于基本類型是不可變的,對于對象和數(shù)組是淺不可變的。

建議在 JavaScript 中使用  let  和  const  來聲明變量,因為它們提供了更好的作用域控制和可讀性,并且可以避免一些常見的錯誤。只在需要兼容舊版本 JavaScript 或特殊情況下使用  var 。

五 . 使用let和const可以避免的常見錯誤

變量提升導(dǎo)致的引用錯誤

console.log(x); // undefined
var x = 10;
console.log(y); // ReferenceError: y is not defined
let y = 20;

使用  var  聲明的變量會被提升到作用域的頂部,這可能會導(dǎo)致在變量聲明之前訪問變量而得到  undefined  的值。通過使用  let  和  const ,變量不會被提升,所以在聲明之前訪問變量會引發(fā)引用錯誤

變量重復(fù)聲明

var x = 10; // OK
var x = 20; // OK
let y = 10; // OK
let y = 20; // Error: Identifier 'y' has already been declared

使用  var  聲明變量時,可以在同一個作用域中多次聲明同一個變量而不會引發(fā)錯誤。這可能會導(dǎo)致意外的行為和 bug。使用  let  和  const  聲明變量時,如果在同一作用域內(nèi)重復(fù)聲明同一個變量,將會引發(fā)錯誤,幫助開發(fā)人員及時發(fā)現(xiàn)并修復(fù)問題。

意外的全局變量

function example() {
  var x = 10;
  if (true) {
    var x = 20;
    console.log(x); // 20
  }
  console.log(x); // 20 (意外的修改了外部變量 x 的值)
}
example();
function example() {
  let y = 10;
  if (true) {
    let y = 20;
    console.log(y); // 20
  }
  console.log(y); // 10 (不會修改外部的變量 y 的值)
}
example();

使用  var  聲明的變量在函數(shù)外部聲明時會成為全局變量,這可能會導(dǎo)致變量在不同的上下文中被意外修改,從而引發(fā)錯誤。使用  let  和  const  可以將變量限制在塊級作用域內(nèi),避免了意外的全局變量問題。

常量重新賦值

const PI = 3.14159;
PI = 3.14; // TypeError: Assignment to constant variable.

使用  const  聲明常量時,不能重新賦值給其他值。這有助于確保常量的值在聲明后保持不變,防止不必要的修改和錯誤。

對象和數(shù)組的不可變性

const person = { name: 'John' };
person.age = 30; // 可以修改對象的屬性
person = { name: 'Jane' }; // TypeError: Assignment to constant variable.
const numbers = [1, 2, 3];
numbers.push(4); // 可以向數(shù)組添加元素
numbers = [1, 2, 3, 4]; // TypeError: Assignment to constant variable.

使用  const  聲明對象和數(shù)組時,雖然變量本身是不可變的,但對象和數(shù)組內(nèi)部的屬性仍然可以修改。這意味著可以修改對象的屬性或向數(shù)組添加元素,但不能將整個對象或數(shù)組重新賦值為其他對象或數(shù)組。

通過使用  let  和  const ,可以在開發(fā)過程中提供更嚴(yán)格的變量聲明和作用域規(guī)則,幫助開發(fā)人員避免一些常見的錯誤,并提高代碼的可靠性和可讀性。

以上就是JavaScript中關(guān)鍵字 var、let、const的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript中var、let、const的區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實現(xiàn)遮罩層效果的簡單實例

    JS實現(xiàn)遮罩層效果的簡單實例

    這篇文章介紹了JS實現(xiàn)遮罩層效果的簡單實例,有需要的朋友可以參考一下
    2013-11-11
  • JavaScript工具庫之Lodash詳解

    JavaScript工具庫之Lodash詳解

    這篇文章主要介紹了JavaScript工具庫之Lodash詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • 教你如何在 Javascript 文件里使用 .Net MVC Razor 語法

    教你如何在 Javascript 文件里使用 .Net MVC Razor 語法

    文章主要是介紹了通過一個第三方類庫RazorJS,實現(xiàn)Javascript 文件里使用 .Net MVC Razor 語法,很巧妙,推薦給大家
    2014-07-07
  • javascript document.compatMode兼容性

    javascript document.compatMode兼容性

    文檔模式在開發(fā)中貌似很少用到,最常見的是就是在獲取頁面寬高的時候,比如文檔寬高,可見區(qū)域?qū)捀叩取?/div> 2010-02-02
  • 通過JS判斷網(wǎng)頁是否為手機打開

    通過JS判斷網(wǎng)頁是否為手機打開

    這篇文章主要介紹了通過JS判斷網(wǎng)頁是否為手機打開,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 使用typescript推導(dǎo)已有變量的盲盒類型詳情

    使用typescript推導(dǎo)已有變量的盲盒類型詳情

    這篇文章主要介紹了使用typescript推導(dǎo)已有變量的盲盒類型詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • javascript中的變量作用域以及變量提升詳細(xì)介紹

    javascript中的變量作用域以及變量提升詳細(xì)介紹

    在javascript中, 理解變量的作用域以及變量提升是非常有必要的。這個看起來是否很簡單,但其實并不是你想的那樣,還要一些重要的細(xì)節(jié)你需要理解
    2013-10-10
  • 微信小程序?qū)崿F(xiàn)事件傳參與數(shù)據(jù)同步流程詳解

    微信小程序?qū)崿F(xiàn)事件傳參與數(shù)據(jù)同步流程詳解

    這篇文章主要介紹了微信小程序開發(fā)中實現(xiàn)事件傳參與數(shù)據(jù)同步的詳細(xì)流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-10-10
  • JavaScript中this詳解

    JavaScript中this詳解

    this是javascript的一個關(guān)鍵字,隨著函數(shù)使用場合不同,this的值會發(fā)生變化。但是總有一個原則,那就是this指的是調(diào)用函數(shù)的那個對象。
    2015-09-09
  • JavaScript高級教程之如何玩轉(zhuǎn)箭頭函數(shù)

    JavaScript高級教程之如何玩轉(zhuǎn)箭頭函數(shù)

    箭頭函數(shù)是在es6中添加的一種規(guī)范,箭頭函數(shù)相當(dāng)于匿名函數(shù),簡化了函數(shù)的定義,下面這篇文章主要給大家介紹了關(guān)于JavaScript高級教程之如何玩轉(zhuǎn)箭頭函數(shù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評論