javascript - JS作用域问题
PHPz
PHPz 2017-04-11 09:00:54
[JavaScript讨论组]
function foo(){  
    function bar(a){
        i=3
    }
    for(var i=0;i<10;i++){
        bar(i*2)
    }
}
PHPz
PHPz

学习是最好的投资!

全部回复(6)
黄舟

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

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

提问者请先看一下:

  • 提问的智慧

  • 技术问答社区中回答的艺术?

  • 编程初学者如何使用搜索引擎

  • 程序员应该掌握的10个搜索技巧

  • 如何利用Google成为一个更好的程序员

  • 只要是搜索引擎能回答的就别问别人……

PHP中文网

看下这个http://www.jb51.net/article/29335.htm

迷茫

为什么会无限循环

伊谢尔伦

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

怪我咯

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号