在js中let和const,var的区别

本文详细探讨了ES6中let、const和var声明变量的区别。let限制了变量的作用域,只在声明的代码块内有效,不能重复声明;const声明常量,一旦赋值不可更改。此外,let和const不会发生变量提升,而var会。理解这些差异对于编写更健壮的JavaScript代码至关重要。

let

1.et 声明的变量只在 let 命令所在的代码块内有效
2.const,let 只能声明一次 var 可以声明多次:

错误的编写
let a = 123
let a = 'heihiehei'
console.log(a)//会直接报错
var a = 123
var a = 'heihei'//会变成替代,代码从上往下执行
console.log(a)//最后输出会是heihei

3.const,let 不存在变量提升,var 会变量提升
在定义前调用

console.log(a)
let a = 123//会直接报错
console.log(a)
var a = 123//在这里是undefined不是报错

const 声明一个只读的常量,一旦声明,常量的值就不能改变

ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错

内容概要:本文提出了一种基于融合鱼鹰算法柯西变异的改进麻雀优化算法(OCSSA),用于优化变分模态分解(VMD)的参数,进而结合卷积神经网络(CNN)与双向长短期记忆网络(BiLSTM)构建OCSSA-VMD-CNN-BILSTM模型,实现对轴承故障的高【轴承故障诊断】基于融合鱼鹰柯西变异的麻雀优化算法OCSSA-VMD-CNN-BILSTM轴承诊断研究【西储大学数据】(Matlab代码实现)精度诊断。研究采用西储大学公开的轴承故障数据集进行实验验证,通过优化VMD的模态数惩罚因子,有效提升了信号分解的准确性与稳定性,随后利用CNN提取故障特征,BiLSTM捕捉时间序列的深层依赖关系,最终实现故障类型的智能识别。该方法在提升故障诊断精度与鲁棒性方面表现出优越性能。; 适合人群:具备一定信号处理、机器学习基础,从事机械故障诊断、智能运维、工业大数据分析等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统VMD参数依赖人工经验选取的问题,实现参数自适应优化;②提升复杂工况下滚动轴承早期故障的识别准确率;③为智能制造与预测性维护提供可靠的技术支持。; 阅读建议:建议读者结合Matlab代码实现过程,深入理解OCSSA优化机制、VMD信号分解流程以及CNN-BiLSTM网络架构的设计逻辑,重点关注参数优化与故障分类的联动关系,并可通过更换数据集进一步验证模型泛化能力。
### JavaScript 中 `let`、`const` `var` 关键字的区别 #### 变量作用域差异 - **`var`**: 定义的变量具有全局作用域或函数作用域,在函数内部声明会绑定到最近的外层函数;如果是在最外层,则会被视为全局变量。对于条件语句或其他非函数代码块(如循环),它不会创建新的作用域[^1]。 ```javascript function example() { if (true) { var x = 10; } console.log(x); // 输出:10 } ``` - **`let` `const`**: 这两个关键字定义的是块级作用域内的局部变量,即仅限于大括号 `{}` 内有效。这意味着即使在同一文件或者同一个函数里,只要不在相同的花括号范围内就可以重复使用相同的名字而不会冲突[^3]。 ```javascript if (true) { let y = 20; const z = 30; } console.log(y); // 报错:y is not defined console.log(z); // 报错:z is not defined ``` #### 是否允许重新赋值 - **`var` `let`**: 都可以被多次赋予不同的值。 - **`const`**: 声明常量,默认情况下不允许改变其指向的内容。不过需要注意的是,如果是对象类型的值(数组也是对象的一种形式),虽然不能更改该引用本身,但仍然能够修改其所指代的对象属性或元素[^2]。 ```javascript const obj = { a: 1 }; obj.a = 2; // 合法操作 // obj = {}; // 错误尝试重置整个对象将会抛出异常 ``` #### 提升行为 - **`var`**: 存在所谓的“变量提升”,意味着所有的 `var` 声明都会被移动至当前执行上下文顶部并初始化为 undefined ,这可能导致意外的结果当开发者以为某些逻辑会在实际声明前运行时。 - **`let` `const`**: 不会发生这种提前加载的行为,因此直到真正到达声明位置才会正式存在这些名字的空间分配,并且在此之前访问它们会导致暂时性的死区错误(TDZ)。 总结来说,为了获得更好的编码实践以及避免潜在陷阱,建议尽可能采用 ES6 推荐的方式——优先考虑使用 `let` 或者 `const` 来代替传统的 `var` 关键字进行变量声明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值