bar函数内部的变量为什么可以遮蔽for循环变量的i?

作者站长头像
站长
· 阅读数 7

题目描述

函数内部命名冲突导致另外一个变量被意外遮盖,导致了无限循环

题目来源及自己的思路

你不知道的js

相关代码

function () {
    function bar() {
        i = 3; //i为啥修改了for循环的i
        console.log( a + i );
        }
     for(var i = 0; i < 10; i++) {
        bar( i * 2 ); //无限循环了
    }

}

你期待的结果是什么?实际看到的错误信息又是什么?

bar 函数内部的变量为什么可以遮蔽 for 循环变量的 i

回复
1个回答
avatar
test
2024-07-03

因为for循环和bar函数在同一个作用域下,而使用var声明的变量会提升到整个作用域的顶部,换用let就是另一种情形

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容