当前位置: 首页 > news >正文

深入理解 JavaScript 中的变量声明:var、let 和 const

目录

1. var

2. let

3. const

4. 区别


在 JavaScript 中,变量的声明是一项基本的操作,而在 ES6(ECMAScript 2015)之后,引入了两个新的关键字 letconst,使得变量声明的方式更加灵活和可控。下面介绍 JavaScript 中三种不同的变量声明方式:varletconst,并分析它们的特点和区别,同时提供一些示例,以便更好地理解。

1. var

var 是 JavaScript 中最早的变量声明方式,它具有以下特点:

  • 函数作用域:var 声明的变量在整个函数体内都是可见的
  • 变量提升:在函数或全局作用域中,var 声明的变量会被提升到作用域的顶部。
function example() {console.log(x); // undefinedvar x = 10;console.log(x); // 10
}
example();

2. let

let 是 ES6 新增的关键字,用于声明块级作用域的变量,具有以下特点:

  • 块级作用域:let 声明的变量只在当前代码块内部有效
  • 不存在变量提升:let 声明的变量不会被提升到代码块的顶部。
{console.log(y); // 报错:Uncaught ReferenceError: Cannot access 'y' before initializationlet y = 20;console.log(y); // 20
}

3. const

const 也是 ES6 新增的关键字,用于声明不可变(常量)的变量,具有以下特点:

  • 块级作用域:const 声明的变量也只在当前代码块内部有效
  • 声明后不可再赋值:const 声明的变量必须在声明时进行初始化,并且在初始化后不可再进行赋值。
const PI = 3.14;
PI = 3.14159; // 报错:Uncaught TypeError: Assignment to constant variable.

4. 区别

  • var 声明的变量具有函数作用域,而 letconst 声明的变量具有块级作用域
  • var 声明的变量存在变量提升,而 letconst 声明的变量不存在变量提升
  • const 声明的变量必须在声明时进行初始化,并且不能再被重新赋值

相关文章:

  • QT 最近使用的项目配置文件
  • 数据结构——优先级队列及多服务台模拟系统的实现
  • 【面试专题】MySQL
  • 网络基础二补充——json与http协议
  • 网络编程的学习1
  • 火车头通过关键词采集文章的原理
  • Linux中断管理:(一)中断号的映射
  • JavaScript高级 —— 学习(四)
  • 「MySQL」索引事务
  • electron打包桌面版.exe之vue项目踩坑(vue3+electron 解决打包后首页打开空白,打包后路由不跳转及请求不到后端数据等问题)
  • 基于OrangePi Zero2的智能家居项目(开发阶段)
  • EMD关于信号的重建,心率提取
  • Linux之进程间通信
  • 用JSch实现远程传输文件并打包成jar
  • (一)kafka实战——kafka源码编译启动
  • gitlab-ci配置详解(一)
  • HTTP中的ETag在移动客户端的应用
  • JavaWeb(学习笔记二)
  • java中的hashCode
  • Windows Containers 大冒险: 容器网络
  • 机器学习学习笔记一
  • 开发基于以太坊智能合约的DApp
  • 爬虫模拟登陆 SegmentFault
  • 与 ConTeXt MkIV 官方文档的接驳
  • Android开发者必备:推荐一款助力开发的开源APP
  • 从如何停掉 Promise 链说起
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $GOPATH/go.mod exists but should not goland
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (ros//EnvironmentVariables)ros环境变量
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (十六)串口UART
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)WLAN定义和基本架构转
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)大道至简,职场上做人做事做管理
  • (转载)Linux网络编程入门
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .net 验证控件和javaScript的冲突问题
  • @SpringBootApplication 包含的三个注解及其含义
  • [ vulhub漏洞复现篇 ] ThinkPHP 5.0.23-Rce
  • [BJDCTF2020]The mystery of ip
  • [C#小技巧]如何捕捉上升沿和下降沿
  • [CareerCup] 12.3 Test Move Method in a Chess Game 测试象棋游戏中的移动方法
  • [codevs] 1029 遍历问题
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [HackMyVM]靶场Crossbow