一个JS简单的问题

l245319872 2012-08-30 09:03:48

function a(){
for(i=0;i<20;i++){
}
}
function b(){
for(i=0;i<3;i++){
a();
}
return i;
}
document.writeln(b());


结果输出是21.求解释下流程,为什么是输出的是a里的i, 不是b里的i
...全文
197 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pxxaish9527 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

让俺来给你详细说说;首先调用b这个是个全局变量,在整个这个script块中都可以使用这个i,首先i=0这时候是小于3的那么将执行a,最后a会执行20次,执行20次过后会最后执行i++这个时候i=20了不满足i《20的条件了,就会又在b()中进行第二次循环,这个时候会进来执行i++因为i已经等于20了,这个时候i++那么i=21了,再去进行i《3的判断,条件不成立,跳出循环,return i;所以……
[/Quote]
顶一个!!!感谢你的付出!
l245319872 2012-08-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

让俺来给你详细说说;首先调用b这个是个全局变量,在整个这个script块中都可以使用这个i,首先i=0这时候是小于3的那么将执行a,最后a会执行20次,执行20次过后会最后执行i++这个时候i=20了不满足i《20的条件了,就会又在b()中进行第二次循环,这个时候会进来执行i++因为i已经等于20了,这个时候i++那么i=21了,再去进行i《3的判断,条件不成立,跳出循环,return i;所以……
[/Quote]

感谢d945332077的回复,了解了,使用全局变量的时候,真要注意。
d945332077 2012-08-30
  • 打赏
  • 举报
回复
让俺来给你详细说说;首先调用b这个是个全局变量,在整个这个script块中都可以使用这个i,首先i=0这时候是小于3的那么将执行a,最后a会执行20次,执行20次过后会最后执行i++这个时候i=20了不满足i《20的条件了,就会又在b()中进行第二次循环,这个时候会进来执行i++因为i已经等于20了,这个时候i++那么i=21了,再去进行i《3的判断,条件不成立,跳出循环,return i;所以i=21了。你明白不??不明白可以来站内信 探讨探讨
  • 打赏
  • 举报
回复
你那样声明i就是全局变量了,改成下面的你就清楚了

    function a() {
for (i = 0; i < 20; i++) {
}
}
function b() {
for (var i = 0; i < 3; i++) {//var申明i变局部
a();
}
return i;
}
document.writeln(b());//b中的局部变量i,输出3
alert(i)//全局变量i

87,991

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧