JavaScript代码输出结果-for循环、setTimeout、let、var

探讨JavaScript中使用var与let声明变量在循环与setTimeout函数中的不同表现,解析变量作用域与闭包概念。

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

for(var i = 0 ;i<3;i++){
    setTimeout(()=>console.log(i),1)
}

for (let i = 0; i < 3; i++) {
    setTimeout(()=>console.log(i),1)
}

A: 0 1 2 和 0 1 2 

B: 0 1 2 和 3 3 3

C: 3 3 3 和 0 1 2   ✔

*   由于JavaScript的事件执行机制,settimeout 函数真正被执行时,循环已经走完

*  第一个循环中的变量  i 是使用 var 关键字声明的, 因此该值是全局的

在循环期间,我们每次使用一元运算符 ++ 都会将 i 的值 增加  1 

再次在调用settimeout 时, i 的值已经是 3 了

*  第二个循环中,使用let关键字声明变量 i,

使用let (const)关键字声明的变量是具有块作用域的(块是{}之间的任何东西)

每次迭代, i  将被创建为一个新值,每个循环内的块级作用域都会有一个 i 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值