js知識點匯總之let const 和 var的區別

let const 和 var的區別

作用域

ES5 中的作用域有:全局作用域、函數作用域,ES6 中新增了塊級作用域。塊作用域由 { } 包括,if 語句和 for 語句里面的 { } 也屬于塊作用域。

var關鍵字

  1. 沒有塊級作用域的概念
// global scope
{var a = 10;
}
console.log(a); // 10

在全局中輸出a為10說明var不存在塊級作用域的概念

  1. 有全局作用域,函數作用域的概念

    var b = 20;
    function test() {var a = 10;console.log(a);console.log(b);
    }
    test();
    console.log(a);
    // 10 20 a is not defined
    
  2. 不初始化值默認為 undefined,存在變量提升

    console.log(a); //undefined
    var a;
    a = 10;
    
  3. 全局作用域用 var 聲明的變量會掛載到 window 對象下

//Global Scope
var a = 10;
console.log(a);  //10
console.log(window.a);  //10
console.log(this.a);  //10
  1. 同一作用域中允許重復聲明
//Global Scope
var a = 10;
var a = 20;
console.log(a);  //20checkscope();
function checkscope(){//Local Scopevar b = 10;var b = 20;console.log(b);  //20
}

上面代碼中,在 Global Scope 中聲明了 2a,以最后一次聲明有效,打印為 20。同理,在 Local Scope 也是一樣的。

let 關鍵字

  1. 有塊級作用域的概念
{//Block Scopelet a = 10;
}
console.log(a);  //ReferenceError: a is not defined

上面代碼中,打印 a 報錯,說明存在 Block Scope 的概念。

  1. 不存在變量提升(不可以在聲明之前使用)
{//Block Scopeconsole.log(a);  //ReferenceError: Cannot access 'a' before initializationlet a = 10;
}

上面代碼中,打印 a 報錯:無法在初始化之前訪問。說明不存在變量提升。

  1. 暫時性死區
{//Block Scopeconsole.log(a);  //ReferenceError: Cannot access 'a' before initializationlet a = 20;
}if (true) {//TDZ開始console.log(a);  //ReferenceError: Cannot access 'a' before initializationlet a; //TDZ結束console.log(a);  //undefineda = 123;console.log(a);  //123
}

上面代碼中,使用 let 聲明的變量 a,導致綁定這個塊級作用域,所以在 let 聲明變量前,打印的變量 a 報錯。

這是因為使用 let/const 所聲明的變量會存在暫時性死區。

什么叫做暫時性死區域呢?翻譯成人話就是:

當程序的控制流程在新的作用域(module、functionblock 作用域)進行實例化時,在此作用域中用 let/const 聲明的變量會先在作用域中被創建出來,但因此時還未進行詞法綁定,所以是不能被訪問的,如果訪問就會拋出錯誤。因此,在這運行流程進入作用域創建變量,到變量可以被訪問之間的這一段時間,就稱之為暫時死區。

再簡單理解就是:

ES6 規定,let/const 命令會使區塊形成封閉的作用域。若在聲明之前使用變量,就會報錯。
總之,在代碼塊內,使用 let/const 命令聲明變量之前,該變量都是不可用的。
這在語法上,稱為 “暫時性死區”temporal dead zone,簡稱 TDZ)。

其實上面不存在變量提升的例子中,其實也是暫時性死區,因為它有暫時性死區的概念,所以它壓根就不存在變量提升了。

  1. 同一塊作用域中不允許重復聲明
{//Block Scopelet A;var A;  //SyntaxError: Identifier 'A' has already been declared
}
{//Block Scopevar A;let A;  //SyntaxError: Identifier 'A' has already been declared
}
{//Block Scopelet A;let A;  //SyntaxError: Identifier 'A' has already been declared
}

const 關鍵字

  1. 必須立即初始化,不能留到以后賦值
// Block Scope 
const a; // SyntaxError: Missing initializer in const declaration } 

上面代碼中,用 const 聲明的變量 a 沒有進行初始化,所以報錯。

  1. 常量的值不能改變
//Block Scope 
{const a = 10; a = 20; // TypeError: Assignment to constant variable
}

上面代碼中,用 const 聲明了變量 a 且初始化為 10,然后試圖修改 a 的值,報錯。

const 實際上保證的,并不是變量的值不得改動,而是變量指向的那個內存地址所保存的數據不得改動。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16197.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16197.shtml
英文地址,請注明出處:http://en.pswp.cn/web/16197.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AGI系列(2):掌握AI大模型提示詞優化術,從容應對各種提問場景

在上一篇大模型提示詞的文章中,筆者介紹一種通用提示詞優化的方法,這種方法基本上可以覆蓋大部分人的一般場景需求。 沒看到上文的讀者,可以通過如下鏈接去看下: 👉👉👉 AGI系列(1&a…

全網首發UNIAPP功能多的iapp后臺源碼

全網首發UNIAPP功能多的iapp后臺源碼,眾所周知UN Dev Assist 后臺是一款既不免費又不好用的后臺今天直接分享。 搭建教程在里面了,自己查看。 源碼下載:https://download.csdn.net/download/m0_66047725/89291994 更多資源下載:…

【Python】處理不平衡數據集的高級方法:ADASYN詳解

原諒把你帶走的雨天 在漸漸模糊的窗前 每個人最后都要說再見 原諒被你帶走的永遠 微笑著容易過一天 也許是我已經 老了一點 那些日子你會不會舍不得 思念就像關不緊的門 空氣里有幸福的灰塵 否則為何閉上眼睛的時候 又全都想起了 誰都別說 讓我一個人躲一躲 你的承諾 我竟然沒懷…

匯編原理(二)

寄存器:所有寄存器都是16位(0-15),可以存放兩個字節 AX,BX,CX,DX存放一般性數據,稱為通用寄存器 AX的邏輯結構。最大存放的數據為2的16次方減1。可分為AH和AL,兼容8位寄存器。 字:1word 2Byte…

JVM學習-Class文件結構②

訪問標識(access_flag) 在常量池后,緊跟著訪問標記,標記使用兩個字節表示,用于識別一些類或接口層次的訪問信息,包括這個Class是類還是接口,是否定義為public類型,是否定義為abstract類型,如果…

健身房會員管理系統服務預約小程序的作用是什么

擁有完美身材/減肥/鍛煉等前往健身房是個不錯的選擇,商家生意開展需要吸引同城客戶并轉化,客戶也有自己的判斷需要找到更全面的場地;完善客戶消費流程利于品牌發展和不斷獲客轉化。 運用【雨科】平臺搭建健身房管理系統小程序,多…

MySQL事務篇1:事物的四大特性(ACID)、三類數據讀取問題與隔離級別

一、什么是事務? MySQL的事務(Transaction)是一組由數據庫管理系統(DBMS)執行的一個或多個SQL語句的集合,這些SQL語句作為一個單獨的工作單元執行。事務的主要目的是確保數據庫的一致性和完整性&#xff0c…

藍橋杯2023(十四屆)省賽——飛機降落(雙馬尾DFS)

飛機降落(DFS) 藍橋杯2023年第十四屆省賽真題-飛機降落 - C語言網 (dotcpp.com) 一開始我是真的沒想到用DFS做,我還在想用什么策略排序呢。需要再刷!!! 雙馬尾的意思其實是刷了兩次... 一刷&#xff1a…

leecode 637 二叉樹的層平均值

leetcode 二叉樹相關-層序遍歷專題 二叉樹的層序遍歷一般來說,我們是利用隊列來實現的,先把根節點入隊,然后在出隊后將其對應的子節點入隊,然后往復此種操作。相比于二叉樹的遍歷遞歸,層序遍歷比較簡單,有…

CHI協議_1

作者:someone鏈接:https://www.zhihu.com/question/304259901/answer/3455648666來源。 1. AMBA CHI簡介 一致性總線接口(CHI)是AXI一致性擴展(ACE)協議的演進。它是Arm的AMBA總線的一部分。AMBA是一種免…

美團Java社招面試題真題,最新面試題

如何處理Java中的內存泄露? 1、識別泄露: 使用內存分析工具(如Eclipse Memory Analyzer Tool、VisualVM)來識別內存泄露的源頭。 2、代碼審查: 定期進行代碼審查,關注靜態集合類屬性和監聽器注冊等常見內…

VueJS ReactJS實現AI問答小助手(2)——流式TTS文字轉實時語音播放

TTS(Text-to-speech)文字轉語音使用的是阿里云的服務,文檔地址: https://help.aliyun.com/zh/isi/developer-reference/streaming-text-tts-wss 文檔只給出了一些配置項的說明,以及java端的代碼示例,但沒有web端的。所以這篇筆記可以給web開發者參考。 首先,AI答復的消息…

.NET File Upload

VS2022 .NET8 &#x1f4be;基礎上傳示例 view {ViewData["Title"] "File Upload"; }<h1>ViewData["Title"]</h1><form method"post" enctype"multipart/form-data" action"/Home/UploadFile"…

Android 系統日志(Log) JNI實現流程源碼分析

1、JNI概述 Java Native Interface (JNI) 是一種編程框架&#xff0c;使得Java代碼能夠與用其他編程語言&#xff08;如C和C&#xff09;編寫的本地代碼進行交互。JNI允許Java代碼調用本地代碼的函數&#xff0c;也允許本地代碼調用Java代碼的函數。下面是對JNI機制的詳細概述…

【單片機】STM32F070F6P6 開發指南(一)STM32建立HAL工程

文章目錄 一、基礎入門二、工程初步建立三、HSE 和 LSE 時鐘源設置四、時鐘系統&#xff08;時鐘樹&#xff09;配置五、GPIO 功能引腳配置六、配置 Debug 選項七、生成工程源碼八、生成工程源碼九、用戶程序下載 一、基礎入門 f0 pack下載&#xff1a; https://www.keil.arm…

【OpenCV 基礎知識 19】拉普拉斯變換

功能&#xff1a; cvLaplace 是計算圖像的 Laplacian 變換 &#xff0c;是Intel開源項目opencv中的函數 函數形式&#xff1a; void cvLaplace( const CvArr* src, CvArr* dst, int aperture_size3 ); 參數列表&#xff1a; Src 輸入圖像. Dst 輸出圖像. aperture_size算子內…

離線初始化k8s

導出和導入所有必要的 Kubernetes 鏡像&#xff0c;使用阿里云作為源。 在能訪問外網的機器上拉取鏡像 首先&#xff0c;在有外網訪問的機器上運行以下命令來拉取所有 Kubernetes v1.29.5 版本需要的鏡像&#xff1a; kubeadm config images pull --image-repository regist…

大模型應用:基于Golang實現GPT模型API調用

1.背景 當前OpenAI提供了開放接口&#xff0c;支持通過api的方式調用LLM進行文本推理、圖片生成等能力&#xff0c;但目前官方只提供了Python SDK。為了后續更方便集成和應用&#xff0c;可以采用Golang對核心推理調用接口進行封裝&#xff0c;提供模型調用能力。 2.相關準備…

Spark運行模式詳解

Spark概述 Spark 可以在多種不同的運行模式下執行&#xff0c;每種模式都有其自身的特點和適用場景。 部署Spark集群大體上分為兩種模式&#xff1a;單機模式與集群模式。大多數分布式框架都支持單機模式&#xff0c;方便開發者調試框架的運行環境。但是在生產環境中&#xff…

軟件web化的趨勢

引言 在信息技術飛速發展的今天&#xff0c;軟件Web化已成為一個不可忽視的趨勢。所謂軟件Web化&#xff0c;即將傳統的桌面應用軟件轉變為基于Web的應用程序&#xff0c;使用戶能夠通過瀏覽器進行訪問和使用。傳統軟件通常需要在用戶的計算機上進行安裝和運行&#xff0c;而W…