For循环中分号隔开的3部分的执行顺序探讨


Posted in Javascript onMay 27, 2014

引发这个问题思考的是一段js程序的运行结果:

var i = 0; 
function a(){ 
for(i=0;i<20;i++){ 
} 
} 
function b(){ 
for(i=0;i<3;i++){ 
a(); 
} 
return i; 
} 
var Result = b();

这段程序的运行结果是Result = 21;

从这段程序中我们可以看出,i在a函数返回的时候值是20这是没有问题的。
而在b函数返回的时候,i的值是20还是21就值得讨论了。
问题的本质即:先进行了判断i<3,还是先进行了i++,再判断是否i<3.

根据执行的结果可以看出,是先执行了i++的。

function a(){ 
for(i=0;i<20;i++){ 
// 没有 var i 
//这里的i就是全局变量所有人可以访问 
} 
} 
function b(){ 
for(i=0;i<3;i++){ 
//alert(i);//同理这里的i也是全局变量,返回0且只有一次返回 
a();//这个函数返回是i=20 
//当i=20 经过 i++后 i=21 那么就不符合i<3的条件,直接退出。所以return i=21 这很正常! 
} 
return i; 
} 
var Result = b();

在此我们补完for循环的执行顺序:
以下面程序为例
for(int i=0;i<10;i++) 
{ 
}

首先执行i=0;i<10; 然后执行第一轮循环体
然后执行:i++,i<10; 然后执行第二轮循环体
直到最后一次 i++后 i >=10,此时循环结束。

语句 1 在循环(代码块)开始前执行

语句 2 定义运行循环(代码块)的条件

语句 3 在循环(代码块)已被执行之后执行

Javascript 相关文章推荐
javascript Base类 包含基本的方法
Jul 22 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
Sep 19 Javascript
javascript面向对象之定义成员方法实例分析
Jan 13 Javascript
Javascript定义类(class)的三种方法详解
Mar 13 Javascript
纯javascript代码实现计算器功能(三种方法)
Sep 07 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
Apr 14 Javascript
微信小程序 MD5的方法详解及实例代码
Mar 10 Javascript
vue 指令之气泡提示效果的实现代码
Oct 18 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
ES6基础之解构赋值(destructuring assignment)
Feb 21 Javascript
vue @click.native 绑定原生点击事件
Apr 22 Vue.js
浅析javascript中function 的 length 属性
May 27 #Javascript
JavaScript模块随意拖动示例代码
May 27 #Javascript
javascript中不提供sleep功能如何实现这个功能
May 27 #Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 #Javascript
纯js实现遮罩层效果原理分析
May 27 #Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
May 27 #Javascript
JQuery获取表格数据示例代码
May 26 #Javascript
You might like
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
PHP结合jQuery实现找回密码
2015/07/22 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
Jquery 插件开发笔记整理
2011/01/17 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
2013/11/01 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
浅谈发布订阅模式与观察者模式
2019/04/09 Javascript
JS XMLHttpRequest原理与使用方法深入详解
2020/04/30 Javascript
vue v-model的用法解析
2020/10/19 Javascript
[01:01:41]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第二场 1月31日
2021/03/11 DOTA
Python爬虫之xlml解析库(全面了解)
2017/08/08 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
2019/08/13 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python属于解释语言吗
2020/06/11 Python
python如何删除列为空的行
2020/07/17 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
HTML5 File接口在web页面上使用文件下载
2017/02/27 HTML / CSS
海信商城:海信电视、科龙空调、容声冰箱官方专卖
2017/02/07 全球购物
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
什么是数据抽象
2016/11/26 面试题
幼儿园大班毕业感言
2014/02/06 职场文书
制药工程专业职业生涯规划范文
2014/03/10 职场文书
2016优秀员工先进事迹材料
2016/02/25 职场文书
浅谈vue2的$refs在vue3组合式API中的替代方法
2021/04/18 Vue.js