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

如何在 JavaScript 中使用 var、let、const 声明变量?

一、核心声明语法(基础用法)

1. var 声明(ES5 语法,不推荐)

语法var 变量名 = 赋值;(赋值可选,未赋值则为undefined

  • 支持无赋值声明重复声明重新赋值
  • 作用域为「函数 / 全局作用域」,无块级作用域。

javascript

运行

// 1. 仅声明,未赋值 var a; console.log(a); // undefined // 2. 声明并赋值 var b = 10; console.log(b); // 10 // 3. 重复声明(允许) var b = 20; console.log(b); // 20 // 4. 重新赋值 b = 30; console.log(b); // 30 // 5. 无块级作用域(if/for 块内声明会泄露到外部) if (true) { var c = 5; } console.log(c); // 5
2. let 声明(ES6 推荐,可变变量)

语法let 变量名 = 赋值;(赋值可选,未赋值则为undefined

  • 不支持重复声明,支持重新赋值
  • 作用域为「块级作用域」({}内),存在暂时性死区。

javascript

运行

// 1. 仅声明,未赋值 let d; console.log(d); // undefined // 2. 声明并赋值 let e = 20; console.log(e); // 20 // 3. 重新赋值(允许) e = 40; console.log(e); // 40 // 4. 重复声明(报错) // let e = 50; // Uncaught SyntaxError: Identifier 'e' has already been declared // 5. 块级作用域(外部无法访问) if (true) { let f = 8; } // console.log(f); // Uncaught ReferenceError: f is not defined // 6. 暂时性死区(声明前访问报错) // console.log(g); // Uncaught ReferenceError: Cannot access 'g' before initialization let g = 100;
3. const 声明(ES6 推荐,常量 / 不可变引用)

语法const 变量名 = 赋值;(赋值必须,不可省略)

  • 不支持重复声明重新赋值
  • 作用域为「块级作用域」,存在暂时性死区;
  • 注意:引用类型(对象 / 数组)仅禁止修改地址,内部属性 / 元素可改。

javascript

运行

// 1. 声明并赋值(必须赋值,否则报错) const h = 30; console.log(h); // 30 // 2. 重新赋值(报错) // h = 60; // Uncaught TypeError: Assignment to constant variable. // 3. 重复声明(报错) // const h = 90; // Uncaught SyntaxError: Identifier 'h' has already been declared // 4. 块级作用域 if (true) { const i = 15; } // console.log(i); // Uncaught ReferenceError: i is not defined // 5. 引用类型(对象/数组):地址不可改,内部可改 const obj = { name: "张三" }; obj.name = "李四"; // 允许修改属性 console.log(obj); // { name: '李四' } const arr = [1, 2, 3]; arr.push(4); // 允许修改元素 console.log(arr); // [1, 2, 3, 4] // arr = [5,6]; // 报错(修改地址)

二、关键使用规则(避坑重点)

  1. 赋值规则
    • var/let 可 “先声明后赋值”,const 必须 “声明即赋值”;
    • 仅 const 禁止重新赋值,var/let 无此限制。
  2. 作用域规则
    • var 无块级作用域,let/const 受{}限制(if/for/ 函数块均生效);
    • 全局作用域中,var 声明会挂载到window,let/const 不会。
  3. 重复声明
    • 同一作用域内,var 允许重复声明,let/const 禁止。

三、实战推荐写法

javascript

运行

// 1. 常量/无需修改的变量 → 用 const const PI = 3.14159; const userList = ["张三", "李四"]; // 数组地址不变,内部可改 // 2. 需要修改的变量 → 用 let let count = 0; count += 1; // 重新赋值 // 3. 循环变量 → 用 let(避免var的作用域泄露) for (let j = 0; j < 3; j++) { console.log(j); // 0,1,2 } // console.log(j); // 报错,j 仅在循环块内有效 // 4. 禁止使用 var → 避免作用域混乱

总结

  1. varvar 变量名 = 值,函数 / 全局作用域,允许重复声明 / 重新赋值(不推荐使用);
  2. letlet 变量名 = 值,块级作用域,禁止重复声明、允许重新赋值(推荐用于可变变量);
  3. constconst 变量名 = 值,块级作用域,禁止重复声明 / 重新赋值(推荐用于常量 / 引用类型)。
http://www.jsqmd.com/news/495014/

相关文章:

  • 人工智能之数学基础:梯度
  • MySQL分库分表的实现(五)--公共表处理
  • 百度文库下载免费方法_百度文库文档免费下载
  • 【华为OD机试真题】黑白棋 · N×N棋盘移动范围问题(Java/Go)
  • TypeScript的as断言与satisfies操作符的类型安全比较
  • AI工具帮助程序员做网页的经历
  • 基于SpringBoot+Vue的智能健身跟踪系统毕设项目(完整源码+论文+部署)
  • ICANN是什么组织?ICANN与域名是什么关系?为什么注册商需要获得ICANN的授权?
  • Docker部署.NET10 项目
  • 测试宇宙假说:我们是否生活在模拟测试中?——软件测试从业者的专业视角
  • Java常用API之String类:
  • ABB机器人仿真工作站:超便捷教学实训平台
  • Rust的std--mem--transmute:类型转换的终极武器(及危险)
  • AI检测算法不断升级:免费降AI工具如何应对新挑战
  • 使用Jsoup爬取豆瓣电影Top250(附Java代码)
  • Redis 队列学习笔记(List Queue)
  • 告别API封号焦虑:分享一个稳定的Claude Code与OpenAI Codex接入方案
  • PMIC小记
  • server-http.ts 文件分析
  • 编程语言特性比较与适用场景选择建议
  • 英伟达GTC 2026“芯片全家桶”震撼登场,微美全息构建全栈算力创新体系迎风而上
  • 用户生成内容:海量数据存储与检索的优化
  • 46页精品PPT | 数据治理大数据平台资源规划与建设解决方案
  • python-flask大学生志愿者组织活动报名管理系统_9fcw0
  • 从315曝光的LLM语料污染看GEO工程化治理
  • 容器化部署最佳实践指南
  • 云原生应用开发中的服务网格实践与服务发现机制
  • 奥尔特云智慧档案:从纸库到数库转型,赋能档案数字化智能化发展
  • 防爆高低温试验箱安全监测智能 - 品牌推荐大师
  • 挖耳勺会伤害到鼓膜吗?可视挖耳勺是智商税吗?可视挖耳勺推荐