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

在JavaScript中,const和var的区别

在JavaScript中,constvar是两种不同的变量声明方式,它们有以下主要区别:

1. 作用域 (Scope)

var - 函数作用域

function test() {if (true) {var x = 10;}console.log(x); // 10 - 在if块外部可以访问
}

const - 块级作用域

function test() {if (true) {const y = 20;}console.log(y); // ReferenceError: y is not defined
}

2. 变量提升 (Hoisting)

var - 会提升,初始值为undefined

console.log(a); // undefined
var a = 5;

const - 会提升,但在声明前访问会报错(暂时性死区)

console.log(b); // ReferenceError: Cannot access 'b' before initialization
const b = 10;

3. 重复声明

var - 允许重复声明

var x = 1;
var x = 2; // 不会报错

const - 不允许重复声明

const y = 1;
const y = 2; // SyntaxError: Identifier 'y' has already been declared

4. 重新赋值

var - 可以重新赋值

var name = "Alice";
name = "Bob"; // 允许

const - 不能重新赋值(常量)

const name = "Alice";
name = "Bob"; // TypeError: Assignment to constant variable

5. 必须初始化

var - 可以不初始化

var x; // undefined

const - 必须初始化

const y; // SyntaxError: Missing initializer in const declaration

6. 全局对象属性

var - 在全局作用域声明时成为window对象的属性

var globalVar = "hello";
console.log(window.globalVar); // "hello"

const - 不会成为window对象的属性

const globalConst = "world";
console.log(window.globalConst); // undefined

重要注意事项

对于const声明的对象和数组:

const person = { name: "Alice" };
person.name = "Bob"; // 允许 - 修改对象属性
// person = { name: "Charlie" }; // 错误 - 不能重新赋值const numbers = [1, 2, 3];
numbers.push(4); // 允许 - 修改数组内容
// numbers = [5, 6, 7]; // 错误 - 不能重新赋值

现代开发建议

  • 优先使用 const
  • 需要重新赋值时使用 let
  • 避免使用 var(除非有特殊需求)
// 推荐写法
const PI = 3.14159;
let count = 0;// 不推荐
var oldWay = "avoid this";

这种模式有助于编写更可预测、更少错误的代码。

http://www.dtcms.com/a/464784.html

相关文章:

  • 【SDR课堂第36讲】RFSOC PS软件开发入门指南(一)
  • 学做网站中国设计网站导航
  • [嵌入式系统-84]:NPU/TPU/LPU有指令集吗?
  • 光伏安全协议-安全责任协议书8篇
  • Java 单元测试全攻略:JUnit 生命周期、覆盖率提升、自动化框架与 Mock 技术
  • SaaS多租户数据隔离实战:MyBatis拦截器实现行级安全方案
  • 【深入理解计算机网络08】网络层之IPv4
  • 网站的标签wordpress 导航栏居中
  • 解决电脑提示“0xc000007b错误”的简单指南
  • 【STM32项目开源】基于STM32的智能家居安防系统
  • 网络营销方式思维导图aso优化榜单
  • HKM9000视频处理卡
  • 机器视觉的平板显示屏加强膜贴合应用
  • 安卓玩机工具----手机秒变电脑麦克风
  • Win10系统笔记本电脑设置合上盖子自动锁屏
  • LLaMA: Open and Efficient Foundation Language Models 论文阅读
  • LeetCode——Hot 100【全排列】
  • 云南大理拍婚纱照价格表建网站优化
  • 双目测距实战1-环境配置
  • 2025人工智能在无人机数据处理中的应用
  • 阿里开源Qwen3-Omni-30B-A3B三剑客——Instruct、Thinking 和 Captioner
  • 长春建站程序湖南网络科技有限公司
  • xtuoj Can you raed it croretcly?
  • 异构动作空间
  • 【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南
  • 小杰深度学习(nine)——CUDA与CuDNN安装
  • 鸿蒙NEXT USB Host模式开发完全指南
  • MinerU2.5 windows 本地部署
  • UIkit中使用新版UICollectionViewCompositionalLayout进行复杂布局(二)
  • 网站建设的技术问题苏州吴江建设局招标网站