Vue学习——Js中var和let的作用域

本文通过示例解释了ES5中var变量没有块级作用域导致的问题,以及ES6中let如何解决这个问题。在ES5的for循环中,由于var的全局或函数作用域特性,导致点击事件监听器中的i始终为最后一个值。而使用let,每个循环内的i都有自己的作用域,避免了这种问题。因此,在开发中推荐使用let声明变量以确保块级作用域的正确应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为在es5中var是没有块级作用域的,所以我们通常要借助于function的作用域来弥补这一缺陷。而es6中的let解决了es5中var没有块级作用域的缺陷,它相当于是一个完美的var。

举例说明没有块级作用域和有块级作用域的区别:

Var(没有块级作用域)
在body中设置4个button按钮

<button>button1</button>
<button>button2</button>
<button>button3</button>
<button>button4</button>

js中的代码

const btnarr = document.getElementsByTagName('button');
for(var i = 0;i < btnarr.length ;i++){
    btnarr[i].addEventListener('click',function(){	// 给每个button动态添加事件
        console.log('第' + i + '个按钮被点击')
    })
}

我们依次点击每个button按钮,设想的运行结果是这样的:
在这里插入图片描述
然而实际的运行结果却是这样的:
在这里插入图片描述

这是因为var = i是没有块级作用域的,for中每个{}中的代码都是使用的同一个i(相当于静态变量),所以i是取的最后一次的赋值,即4
图解:
在这里插入图片描述

使用let可以完美的解决var没有块级作用域的缺陷:

const btnarr = document.getElementsByTagName('button');
for(let i = 0;i < btnarr.length ;i++){
    btnarr[i].addEventListener('click',function(){
        console.log('第' + i + '个按钮被点击')
    })
}

依次点击每个button按钮后的运行结果:
在这里插入图片描述
这是因为let有自己的块级作用域,此时for中每个{}中的代码使用的都是自己独立的i,不会影响其它作用域中的i。
图解:
在这里插入图片描述
所以说,我们在开发中尽量使用let来声明变量,毕竟let的出现是弥补var的没有块级作用域的缺陷的。

喜欢的朋友可以点赞加收藏哦,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值