JS作用域问题

发布于 2022-09-02 12:47:06 字数 135 浏览 10 评论 0

function foo(){  
    function bar(a){
        i=3
    }
    for(var i=0;i<10;i++){
        bar(i*2)
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

怼怹恏 2022-09-09 12:47:07

为什么会无限循环

酸甜透明夹心 2022-09-09 12:47:07

bar(...)内部的赋值表达式i = 3意外地覆盖了声明在foo(...)内部for循坏中的i,在这个例子中将会导致无限循环,因为i的值被固定在了3,永远满足i<10这个条件。i=3,不加var 关键字,默认操作的是公有变量

江南烟雨〆相思醉 2022-09-09 12:47:07

第一次循环,i=0,进入bar之后,i=3,然后++,i=4。i等于4小于10,进入第二次循环,进入bar,i再次被赋值为3,再++,i有等于4了。所以第二次循环开始进入无限循环了。在循环体加个console.log(i)就看出来了。

只为守护你 2022-09-09 12:47:06

函数执行的时候,先把下面所有的var提到函数最前面,执行完这些var(仅声明,不赋值)后,再开始执行正式的函数内容,再遇到var语句如果有赋值,则执行赋值,没赋值,跳过。

function foo(){
    var i;
    function bar(a){
        i=3
    }
    for(i=0;i<10;i++){
        bar(i*2)
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文