JS中的let、const和Java中变量声明作用域比较

最近在学前端,发现这玩意不比java简单多少…
let和const出现,才让js明朗起来,但是很容易跟var混掉,我发现从java角度理解let和const会出奇的通透,
这里以let为例

先说结论二者非常相似

相同点:

1.块级作用域

JavaScript 的 let 和 Java 的局部变量(如在方法、循环或 if 语句中声明的变量)都是块级作用域。它们只在声明的代码块 {} 内有效。例如,以下代码在两种语言中都适用:

if (true) {
  let x = 10;
}
console.log(x); // 报错:x is not defined
if (true) {
    int x = 10;
}
System.out.println(x); // 报错:x cannot be resolved to a variable

在这两种情况下,x 只能在 if 块内部访问,出了块就无法访问。

2.避免变量提升

JavaScript 中的 let 不会像 var 那样发生变量提升,而是遵循块级作用域,这一点和 Java 一致。

console.log(x); // ReferenceError: x is not defined
let x = 10;

console.log(y); // 输出 undefined
var y = 10;

Java 中的变量声明也不会提升,因此在声明之前使用变量会导致编译错误。

System.out.println(x); // 编译错误:x 可能尚未初始化
int x = 10;

不同点:

1.生命周期不同(GC差异)

JavaScript 一旦执行离开块,let 变量就会被销毁,但只有在没有引用时,垃圾回收器才会将内存释放,

在 Java 中,变量的生命周期取决于它的声明位置和类型。局部变量在本块执行结束后立即被销毁。对于实参,当对象被垃圾回收时,实例变量也会被销毁

2.作用域嵌套的细节差异

JavaScript 中 let 允许在不同的嵌套作用域中声明同名变量

{
  let x = 10;
  {
    let x = 20; // 合法,在不同的块作用域中
  }
}

Java 不允许在嵌套作用域中声明同名的局部变量。

{
    int x = 10;
    {
        int x = 20; // 编译错误:变量 x 已在作用域中定义
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值