文章目录

  • JavaScript 中 var、let、const 的差异
    • 1. 作用域(Scope)
    • 2. 变量提升(Hoisting)
    • 3. 重复声明
    • 4. 变量值是否可变
    • 对比表
    • 5. 示例代码
    • 总结

JavaScript 中 var、let、const 的差异

1. 作用域(Scope)

  • var

    • 函数作用域(function scope)
    • 在函数内部用 var 声明的变量,只在函数内部可见。
    • 在块 {} 中声明的 var,会“泄露”到外层。
  • let / const

    • 块级作用域(block scope)
    • {} 内声明,只在这个块内有效(如 if、for、while 块)。

2. 变量提升(Hoisting)

  • var

    • 会被提升(hoisting)到作用域顶端,声明提前,但赋值不提前
    • 使用前变量值是 undefined
  • let / const

    • 也会提升,但存在 暂时性死区(TDZ,Temporal Dead Zone)
    • 在声明之前访问会报错。

3. 重复声明

  • var

    • 在同一作用域中可以重复声明,不会报错(但会覆盖)。
  • let / const

    • 在同一作用域中不能重复声明,否则报错。

4. 变量值是否可变

  • var / let

    • 都可以重新赋值。
  • const

    • 声明后必须立即赋值,且不能重新赋值。
    • 注意:如果 const 指向对象/数组,内部属性仍然可以修改。

对比表

特性varletconst
作用域函数作用域块级作用域块级作用域
变量提升有,值为 undefined有,但存在暂时性死区有,但存在暂时性死区
重复声明允许不允许不允许
是否必须赋初值
是否可重新赋值可以可以不可以(引用可变)

5. 示例代码

// var 演示
if (true) {var a = 10;
}
console.log(a); // 10 (变量泄露出块作用域)// let 演示
if (true) {let b = 20;
}
// console.log(b); // 报错:b is not defined// const 演示
const PI = 3.14;
// PI = 3.14159; // 报错:Assignment to constant variableconst obj = { name: "Tom" };
obj.name = "Jerry"; // ✅ 可以修改对象属性
console.log(obj.name); // Jerry

总结

  • var:老语法,函数作用域,会变量提升。
  • let:推荐,块级作用域,可重新赋值。
  • const:推荐,块级作用域,声明常量,引用不可变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96651.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96651.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96651.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Docker 中安装 MySQL 教程

拉取 MySQL 镜像docker pull mysql:8.0创建并启动 MySQL 容器docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v mysql_data:/var/lib/mysql \mysql:8.0命令说明:-d:后台运行容器 --name mysql8:给容器起个名字…

C#线程理解

目录 一.线程类 1.基础线程类(Thread) 2.线程池类(Threadpool) 3.任务并行库(Task) 4.并行循环(Parallel) 二.线程池(threadPool)和Thread/Task之间的联系 1.ThreadPool和Thr…

Java入门级教程16——JUC的安全并发包机制

目录 1.JUC的安全并发包机制 1.1 包含 1.2 Barrier(栅栏)机制——CyclicBarrier(循环屏障) 1.2.1 定义 1.2.2 特性 1.2.1 模拟包车 1.2.2 模拟学生到齐上课 1.2.3 计算任务总耗时 1.3 CountDownLatch(闭锁)机制 1.3.1 定义 1.3.2 特性 1.3.3…

【网络通信】全面解析MAC地址:网络设备的唯一标识

【网络通信】全面解析MAC地址:网络设备的唯一标识 文章目录【网络通信】全面解析MAC地址:网络设备的唯一标识前言一、MAC 地址的定义:设备的 “网络身份证”​二、MAC 地址的格式与组成:48 位的 “数字编码”​三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默认启用现代分析引擎、支持 MISRA C:2025 新规、CI构建性能提升等

Perforce Klocwork 现已更新至2025.2版本!该版本增强了对 C/C的分析能力,提升了现代 C 分析的准确性,并改进了对源文件编码的支持。该版本还为 MISRA C:2025 标准引入了新的分类体系,并增强了 Visual Studio Code 插件的可用性。 …

机器人驭风而行:低空经济如何开启智能新纪元【科普类】

新晋码农一枚,小编会定期整理一些写的比较好的代码和知识点,作为自己的学习笔记,试着做一下批注和补充,转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!…

Java学习笔记四(继承)

1 继承继承的实现:public class 子类 extends 父类 {… }注释:子类可直接使用,父类(保护,公开)的属性和方法优点:减少重复代码,缺点:只能单继承// 父类 public class Tes…

NAT技术:SNAT与DNAT区别详解

1. 什么是NAT? 定义:NAT 是一种网络技术,用于在私有网络(如家庭或企业局域网) 与 公共网络(如互联网) 之间转换IP地址。它允许使用私有IP地址的设备通过一个(或多个)公共…

java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割

java语言中&#xff0c;list<String 转成字符串&#xff0c;逗号分割 在 Java 中&#xff0c;将 List<String> 转成逗号分割的字符串有多种方法&#xff1a; 使用 String.join 方法 String.join 是 Java 8 引入的一个静态方法&#xff0c;它可以方便地将集合中的元素用…

NineData云原生智能数据管理平台新功能发布|2025年8月版

本月发布 11 项更新&#xff0c;其中重点发布 5项、功能优化 6 项。重点发布数据库 DevOps - SQL 窗口支持 PolarDB 系列SQL 窗口新增支持 PolarDB PostgreSQL 与 PolarDB Oracle 数据源&#xff0c;扩展云原生数据库管理能力。新增 AWS 数据源支持新增支持 AWS Aurora Postgre…

【ARDUINO】通过ESP8266连接WIFI,启动TCP,接受TCP客户端指令【测试中】

通过ESP8266连接WIFI&#xff0c;启动TCP&#xff0c;接受TCP客户端指令**记录**2025年9月8日11:20:372025年9月9日08:45:342025年9月11日21:40:22**代码**记录 2025年9月8日11:20:37 【测试情况】 代码可以跑到正确连接WIFI&#xff0c;也能获得IP&#xff0c;但是启动TCP服…

(网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解

目录 核心知识回顾 网络核心原理 get和post的理解 解析http 加密请求和响应的一些关键字 Cookie和session 对密钥的理解 核心知识回顾 网络编程---socket api UDP DatagramSocket DatagramPacket TCP ServerSocket Socket 1.读写数据通过Socket,通过Socket内置的 lnpu…

前端框架对比分析:离线PWA + Cloudflare Workers部署

目录 概述 框架对比表格 详细分析 1. Astro ⭐⭐⭐⭐⭐ **强烈推荐** 2. Next.js ⭐⭐⭐⭐ **推荐** 3. Remix (现React Router) ⭐⭐⭐⭐⭐ **强烈推荐** 4. SvelteKit ⭐⭐⭐⭐ **推荐** 5. Nuxt.js ⭐⭐⭐ **一般推荐** 6. Vite + React ⭐⭐⭐ **基础选择** 推荐方案 🏆 …

9-10关于JS初学产生的问题

1.页面添加加载完成事件监听&#xff0c;页面加载完成后&#xff0c;执行页面初始化方法/函数; 这是什么意思 这句话描述的是前端开发中一种常见的操作&#xff1a;等待页面完全加载完成后&#xff0c;再执行特定的初始化代码。 简单来说&#xff0c;就是要确保页面上的所有元素…

项目中遇到pom文件里使用systemPath的例子记录

项目中遇到pom文件里使用systemPath&#xff0c;很少见&#xff0c;问了下豆包&#xff0c;记录下结果。在 Maven 的 pom.xml 中&#xff0c;<systemPath> 是 <dependency> 标签内的一个可选配置&#xff0c;用于手动指定本地系统中某个依赖包&#xff08;通常是 J…

10、向量与矩阵基础 - 深度学习的数学语言

学习目标:建立向量和矩阵的几何直观理解,掌握线性代数的核心概念,培养空间思维能力,为手搓大模型奠定扎实的数学基础 想象一下,当你使用GPT进行对话时,每个词汇都被转换成高维向量,整个对话历史变成一个巨大的矩阵。模型的"理解"过程,本质上就是在这个高维空…

【Python Tkinter】图形用户界面(GUI)开发及打包EXE指南

【Python Tkinter】图形用户界面&#xff08;GUI&#xff09;开发及打包EXE指南一、关于 Python Tkinter二、密码生成器示例2.1 使用Python添加图形用户界面&#xff08;GUI&#xff09;2.2 使用工具PyInstaller将应用打包成exe文件三、总结一、关于 Python Tkinter Python Tk…

【设计模式】【观察者模式】实例

一对多的统一监听 —— 这就是 观察者模式&#xff08;Observer Pattern&#xff09; 的经典应用场景。也就是说&#xff1a;一个事件源&#xff08;Subject&#xff09; → 可以注册多个监听器&#xff08;Observers&#xff09;&#xff1b;当事件发生时&#xff0c;一次性通…

C#测试调用OpenXml操作word文档的基本用法

OpenXML SDK是微软为高效处理Office文档&#xff08;如Word、Excel&#xff09;而开发的开源.NET库,它直接操作文档内部的XML结构&#xff0c;无需安装Office软件即可实现文档的创建、读取和编辑,常用于服务器端批量生成报表、自动化文档处理等场景&#xff0c;轻量且跨平台。本…

照度传感器考虑笔记

您好&#xff01;很高兴为您解答关于照度计传感器和设计的问题。这是一个非常专业且实际的话题。 一、照度计常用的照度传感器类型 照度计的核心是光电探测器&#xff0c;其工作原理是将光信号转换为电信号。目前主流的照度传感器都属于硅光电二极管&#xff08;Si Photodiode&…