【js(1)一文解決】var let const

var let const

  • !在 ES6 之前,JavaScript 只有兩種作用域: 全局變量 與 函數內的局部變量
  • 一、var
    • 1. 函數級作用域,有變量提升
  • 二、let(ES6新增)
    • 1. 塊級作用域,不會影響外部作用域
    • 2.let 關鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值
    • 3. 聲明時可以不用先初始化
    • 4. 在相同的作用域或塊級作用域中,不能使用 let/var 來重置 let/var 聲明的變量
  • 三、const(ES6新增)
    • 1.const聲明的常量必須初始化
    • 2. 聲明一個只讀的常量,常量的值不能更改
    • 3. 使用 const 定義的對象或者數組,其實是可變的,但是我們不能對常量對象重新賦值
    • 4. const 關鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值的(在相同的作用域不行)
  • 四、循環作用域
    • 1.使用 var 關鍵字
    • 2. 使用 let 關鍵字

!在 ES6 之前,JavaScript 只有兩種作用域: 全局變量 與 函數內的局部變量

全局作用域

//變量在任何函數之外聲明時,它就成為了一個全局變量。全局變量可以在代碼的任何地方被訪問或修改,包括所有函數內。
var globalVar = "I'm global";function exampleFunction() {console.log(globalVar); // 輸出: I'm global
}console.log(globalVar); // 輸出: I'm global
exampleFunction();

函數作用域

//變量是在函數內部使用 var 關鍵字聲明的,那么這個變量就是局部變量,它的作用范圍僅限于該函數內部
function outerFunction() {var localVar = "I'm local";function innerFunction() {console.log(localVar); // 輸出: I'm local}innerFunction();
}outerFunction();
// console.log(localVar); // 拋出錯誤: ReferenceError: localVar is not defined

一、var

1. 函數級作用域,有變量提升

函數級作用域例子

function txt(){var a = 1;//局部變量
}
txt();
console.log(a)//會報錯(無法在外部訪問)

變量提升例子

function example() {var a = 10;if (true) {var a = 20;console.log(a); // 輸出 20}console.log(a); // 輸出 20
}

這段代碼相當于

function example() {var a;      // 聲明提升a = 10;     // 賦值保留在原位if (true) {a = 20; // 依然是修改同一個變量console.log(a); // 20}console.log(a); // 20(因為一直是同一個變量)//var在{}塊級內部聲明的變量在外部也是可訪問的
}

為什么會有變量提升? 導致了什么問題?
1.允許函數在聲明之前被調用
2.會有一些不易察覺的bug

//使用var
if (true) {console.log(a); // undefined(變量提升)var a = 10;
}
console.log(a); // 10
//在賦值前訪問變量會得到 undefined,容易引發 bug
//使用let
if (true) {console.log(a); // 報錯:ReferenceError(暫時性死區)let a = 10;
}
//let和const在聲明前訪問會拋出錯誤,避免了訪問未定義變量的問題

二、let(ES6新增)

1. 塊級作用域,不會影響外部作用域

function example() {let a = 10;if (true) {let a = 20;console.log(a); // 20}console.log(a); // 10(因為塊作用域中的 a 是獨立的)
}

2.let 關鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值

let x = 2;       // 合法{let x = 3;   // 合法
}{let x = 4;   // 合法
}

3. 聲明時可以不用先初始化

// 在這里不可以使用 carName 變量(沒有變量提升)let carName;

4. 在相同的作用域或塊級作用域中,不能使用 let/var 來重置 let/var 聲明的變量

三、const(ES6新增)

1.const聲明的常量必須初始化

// 錯誤寫法
const PI;
PI = 3.14159265359;// 正確寫法
const PI = 3.14159265359;

2. 聲明一個只讀的常量,常量的值不能更改

const PI = 3.141592653589793;
PI = 3.14;      // 報錯
PI = PI + 10;   // 報錯

3. 使用 const 定義的對象或者數組,其實是可變的,但是我們不能對常量對象重新賦值

// 創建常量對象
const car = {type:"Fiat", model:"500", color:"white"};// 修改屬性:
car.color = "red";// 添加屬性
car.owner = "Johnson";
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"};    // 錯誤

4. const 關鍵字在不同作用域,或不同塊級作用域中是可以重新聲明賦值的(在相同的作用域不行)

const x = 2;       // 合法{const x = 3;   // 合法
}{const x = 4;   // 合法
}

四、循環作用域

1.使用 var 關鍵字

//聲明的變量是全局的,包括循環體內與循環體外
var i = 5;
for (var i = 0; i < 10; i++) {// 一些代碼...
}
// 這里輸出 i 為 10

2. 使用 let 關鍵字

//聲明的變量作用域只在循環體內,循環體外的變量不受影響
var i = 5;
for (let i = 0; i < 10; i++) {// 一些代碼...
}
// 這里輸出 i 為 5

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

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

相關文章

論螺旋矩陣

螺旋矩陣題型總結。我刷了幾道螺旋矩陣相關的題目&#xff0c;這里我們介紹一下一些常見的解法。 螺旋矩陣 方形矩陣 當我們遇到n*n的方形矩陣時&#xff0c;可以用一種特殊的解法來遍歷實現&#xff0c;以下面這道題為例&#xff1a; 59. 螺旋矩陣 II 我們可以定義幾個變…

數學金融與金融工程:學科差異與選擇指南

在金融領域的學習中&#xff0c;數學金融與金融工程常被混淆。兩者雖同屬 “金融 量化” 交叉方向&#xff0c;但在研究側重、培養路徑上有顯著區別。結合學科特點與行業實踐&#xff0c;幫大家理清兩者的核心差異&#xff0c;以便更精準地選擇方向。一、核心差異&#xff1a;…

包管理工具npm cnpm yarn的使用

包管理工具 1. 什么是包管理工具? 包管理工具是用于管理和安裝 Node.js 項目依賴的工具。它們提供了一種結構化的方式來管理項目的依賴關系,使得項目的依賴管理變得更加便捷和可靠。 2. 常見的包管理工具有哪些? npm(Node Package Manager):是 Node.js 的默認包管理工…

網絡基礎13--鏈路聚合技術

一、鏈路聚合概述定義將多條物理鏈路捆綁為一條邏輯鏈路&#xff0c;提升帶寬與可靠性。2. 應用場景交換機/路由器/服務器之間的互聯&#xff0c;支持二層&#xff08;數據鏈路層&#xff09;和三層&#xff08;網絡層&#xff09;聚合。二、核心作用增加帶寬聚合鏈路的總帶寬 …

一文講清楚React性能優化

文章目錄一文講清楚React性能優化1. React性能優化概述2. React性能優化2.1 render優化2.2 較少使用內聯函數2.3 使用React Fragments避免額外標記2.4 使用Immutable上代碼2.5 組件懶加載2.6 服務端渲染2.7 其他優化手段一文講清楚React性能優化 1. React性能優化概述 React通…

3.0 - 指針-序列化

一、關于Serialize的使用 可以使用該指令臨時將用戶程序的多個結構化數據項保存到緩沖區中(最好位于全局數據塊中)。用于保存轉換后數據的存儲區的數據類型必需為 ARRAY of BYTE 或 ARRAY of CHAR 相當于把一個struct或其他自定義類型變成一個字節數組。 比如我有好幾個結構體…

【論文精讀】基于共識的分布式量子分解算法用于考慮最優傳輸線切換的安全約束機組組合

本次分析的論文《Consensus‐Based Distributed Quantum Decomposition Algorithm for Security‐Constrained Unit Commitment Considering Optimal Transmission Switching》于2025年6月25日在《Advanced Quantum Technologies》期刊上公開發表。本文提出了一個新的基于共識的…

MyBatis-Flex代碼生成

引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok<…

知網論文批量下載pdf格式論文,油猴腳本

任務描述 今天收到一個任務&#xff0c;在知網上&#xff0c;把一位專家所有的論文全都下載下來&#xff0c;要保存為PDF格式。 知網不支持批量導出PDF格式論文。一個一個下載PDF&#xff0c;太繁瑣了。 解決方案&#xff1a;找到一個油猴腳本&#xff0c;這個腳本可以從知網…

低代碼平臺:驅動項目管理敏捷開發新范式

隨著企業數字化轉型加速&#xff0c;項目管理系統已從單一任務跟蹤工具到集成流程自動化、資源調度、跨團隊協作與風險監控的綜合平臺&#xff0c;項目管理系統的功能復雜度持續提升。然而&#xff0c;根據Gartner 2024年研究報告顯示&#xff0c;約60%的項目管理系統因未能有效…

圖機器學習(11)——鏈接預測

圖機器學習&#xff08;11&#xff09;——鏈接預測0. 鏈接預測1. 基于相似性的方法1.1 基于指標的方法1.2 基于社區的方法2. 基于嵌入的方法0. 鏈接預測 鏈接預測 (link prediction)&#xff0c;也稱為圖補全&#xff0c;是處理圖時常見的問題。具體而言&#xff0c;給定一個…

簡單2步配置CadenceSkill開發編輯器,支持關鍵字高亮

Cadence 使用過程中難免會與skill打交道&#xff0c;有時候網上找到的開源skill&#xff0c;想要查看或者編輯一下&#xff0c;常規的txt編輯器沒有關鍵字高亮&#xff0c;看起來極為不方便。 利用Sublime Text可以很快速配置出支持skill關鍵字高亮的編輯器。 一、安裝 Sublime…

Leetcode刷題營第三十三題:對稱二叉樹

101. 對稱二叉樹 給你一個二叉樹的根節點 root &#xff0c; 檢查它是否軸對稱。 示例 1&#xff1a; 輸入&#xff1a;root [1,2,2,3,4,4,3] 輸出&#xff1a;true示例 2&#xff1a; 輸入&#xff1a;root [1,2,2,null,3,null,3] 輸出&#xff1a;false 提示&#xff1a;…

day055-Dockerfile與常用指令

文章目錄0. 老男孩思想-女性的第一需求1. Dockerfile1.1 Dockerfile的基本結構1.2 案例-制作小鳥飛飛鏡像1.2.1 編寫Dockerfile文件1.2.2 構建鏡像1.2.3 啟動容器1.3 Dockerfile常用指令1.4 面試題&#xff1a;Dockerfile中CMD和ENTRYPOINT的區別&#xff1f;1.5 案例-制作zrlo…

Spring Boot 應用優雅停機與資源清理:深入理解關閉鉤子

在開發和部署 Spring Boot 應用程序時&#xff0c;除了關注其啟動和運行&#xff0c;理解如何實現**優雅停機&#xff08;Graceful Shutdown&#xff09;**也同樣至關重要。優雅停機意味著在應用程序關閉時&#xff0c;能夠有序地釋放資源、完成正在進行的任務&#xff0c;并避…

淘寶扭蛋機小程序開發:重構電商娛樂化體驗的新范式

在電商行業同質化競爭加劇的當下&#xff0c;消費者對購物體驗的期待已從“功能滿足”轉向“情感共鳴”。淘寶扭蛋機小程序憑借“盲盒式隨機獎勵游戲化交互”的創新模式&#xff0c;成為撬動年輕用戶消費力的新支點。其開發邏輯不僅是對傳統電商的升級&#xff0c;更是對“娛樂…

YOLO演變史(一)

在YOLOV1發布后&#xff0c;作者并沒有滿足于此&#xff0c;而是持續對YOLO進行了改進。 YOLOV2&#xff1a;Better, Faster, Stronger YOLOv2&#xff08;又稱YOLO9000&#xff09;發表于2017年CVPR&#xff0c;是YOLO系列的第二代版本。其論文標題“Better, Faster, Stronger…

專題:2025智能體研究報告|附70份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p43035 智能體正在改寫商業規則&#xff1a;某城商行的智能客服用公有云部署&#xff0c;把單筆交互成本從5.7元砍到1.2元&#xff0c;投訴率直降42%&#xff08;《賽迪智庫&#xff1a;2025全球智能體進展報告》P24&#xff09;&…

Axios 完整功能介紹和完整示例演示

Axios 是一個基于 Promise 的現代化 HTTP 客戶端庫&#xff0c;用于瀏覽器和 Node.js 環境。它提供了簡潔的 API 和強大的功能&#xff0c;是前端開發中最常用的網絡請求工具之一。核心功能 瀏覽器 & Node.js 雙平臺支持 瀏覽器中使用 XMLHttpRequestNode.js 中使用 http 模…

math.h函數

math.c函數作用 1. 基本三角函數&#xff08;參數為弧度&#xff09; sin(double x)&#xff1a;計算正弦值。cos(double x)&#xff1a;計算余弦值。tan(double x)&#xff1a;計算正切值。asin(double x)&#xff1a;反正弦&#xff08;返回值范圍&#xff1a;[-π/2, π/2]&…