相信很多新手在撸代码的时候,涉及到for循环会出现一些问题,无法得到我们想要的值。大多数时候是我们没有弄清楚for循环到底是什么,所以在某些情况下,输出的不是我们想要的值。最近学习了一下js中for循环中item值的问题,在此分享出来也方便自己日后巩固学习。
1.i没有被定义
>在使用for循环之前,必须先定义变量i。如果i没有被定义,那么它就不能在循环中使用
for(;i<3;i++){
console.log(i);
}
输出
2.i的作用域范围之外
如果i的定义超出了for循环的作用域范围,那么在循环外部就无法使用。栗子:在for循环内部定义的i,在循环外部就无法访问
for(;i<3;i++){
}
console.log(i);
输出
3.i被其他变量或函数占用
如果在for循环之前已经存在名为i的变量或函数,那么在循环中就无法使用i,除非重命名变量
for(var i = 0 ;i<3;i++){
i = 'hello'
console.log(i);
}
输出
4.i被声明为常量
如果i被声明为常量,那么它的值无法改变,也无法在for循环中使用
for (const i = 0; i < 3; i++) {
i = 'hello'
console.log(i);
}
输出
5.i在定时器内
如果你尝试在定时器内部使用for循环,并且在每次迭代中使用相同的变量i,会导致以下问题:
- 1、闭包问题:由于JavaScript的特性,定时器内部访问的变量i是for循环结束时的最终值,而不是每次迭代更新的值,这可能导致意外的行为和错误 2、异步执行:定时器函数是异步执行的,它不会等待循环完成再执行。因此,在循环内部使用定时器可能会导致意外的结果,因为定时器可能在循环结束之前就触发了
for (var i = 0; i < 3; i++) {
setInterval(() => {
console.log(i);
})
}
输出
每一次循环都会重新声明变量i,随后每一个循环都会使用上一个循环时结束的值来初始化这个变量i。let非常适合用于for循环内部的块级作用域。js中的for循环比较特殊,每次执行都是一个全新的独立的块级作用域,用let声明的变量传入到for循环体的作用域后,不会发生改变,不受外界的影响
这些都是常见的情况,其中一些可能会导致编译错误或运行时错误。确保在使用for循环之前正确定义和使用变量i,以避免初见这些问题 好啦,今天的知识就分享到这里啦。欢迎大家在评论里指点讨论
学到知识了就点个赞叭