JavaScript之let与var的区别

var会污染全局变量

如果var在if里面定义在if外面也能够访问到。

若是想实现某些需求,var会变得十分繁琐。

例如:

点击每一列,输出每列的索引值。

若是用var来做

只会使点击的每一列都是3,因为var所定义的i已经变成了一个全局变量,for循环一瞬间执行完成了,var i 的值只会使最后一个的值,若是想达成需求,只能给oli每个节点,分配一个index,来实现。

let不会污染全局变量

let使变量限制在这块之内,外面访问不到if块里的变量。

 若是想实现某些需求,let比之var会轻松很多。

例如:

点击每一列,输出每列的索引值。

用let来做

用let,就不用分配index了,因为在每一个块级作用域,i都是新定义的,不会变量提升到全局。

每一轮for循环的i都是一个新的值。i的变量只在for循环的作用域有效,不会影响其他地方。

var允许重复声明

let不允许重复声明

var会变量提升

let会变量提升,但不等同于var的变量提升

let会变量提升,let还有暂存性死区

报错的意思就是,初始化前不能访问。let所定义的变量的声明会被提升到顶部,但变量的初始化,依然会在原来的位置出现,如果你想在变量初始化之前访问变量,将会得到一个ReferenceError。

在这个时间段,变量已经被创建,但还未完成初始化,因此处于死亡状态,称之为暂存性死区。

var会与顶层对象挂钩

var关键字声明的变量会成为全局变量,并附加到全局对象window身上。

let不会与顶层对象挂钩

它有助于减少由于意外创建全局变量所导致的bug

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值