For循环中分号隔开的3部分的执行顺序探讨
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.
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 在循环(代码块)已被执行之后执行
相关推荐
-
For循环中分号隔开的3部分的执行顺序探讨
引发这个问题思考的是一段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就值得讨论了. 问题的本质即:先进行
-
对python中的try、except、finally 执行顺序详解
如下所示: def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return 'try' except Exception: print('process except') print('to return in except') return 'except' finally: print('to return in finally') return 'finally'
-
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
想要添加这个效果,先来弄明白页面的加载和事件执行顺序,看这个简单例子: <html xmlns="http://www.w3.org/1999/xhtml"> <head > <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>验证加载顺序</title> <script src=
-
java面试题之try中含return语句时代码的执行顺序详解
前言 最近在刷java面试题偶然看到这类问题(try/finally中含有return时的执行顺序),觉得挺有意思于是小小的研究了一下,希望经过我添油加醋天马行空之后,能给你带来一定的帮助,下面来看看详细的介绍. 原题 try {} 里有一个return语句,那么紧跟在这个try后的finally {}里的代码会不会被执行?什么时候被执行?在return前还是后? 乍一看题目很简单嘛,java规范都说了,finally会在try代码块的return之前执行,你这文章写得没意义,不看了 你等等!(
-
java中静态代码块与构造方法的执行顺序判断
前言 静态代码优先于非静态的代码,是因为被static修饰的成员都是类成员,会随着JVM加载类的时候加载而执行,而没有被static修饰的成员也被称为实例成员,需要创建对象才会随之加载到堆内存.所以静态的会优先非静态的. 执行构造器(构造方法)的时候,在执行方法体之前存在隐式三步: 1,super语句,可能出现以下三种情况: 1)构造方法体的第一行是this语句,则不会执行隐式三步, 2)构造方法体的第一行是super语句,则调用相应的父类的构造方法, 3)构造方法体的第一行既不是this语句也
-
vue中created、watch和computed的执行顺序详解
目录 前言 为什么? 1.关于initComputed 2.关于initWatch 总结 前言 面试题:vue中created.watch(immediate: true)和computed的执行顺序是啥? 先看个简单的例子: // main.js import Vue from "vue"; new Vue({ el: "#app", template: `<div> <div>{{computedCount}}</div> &
-
Js中async/await的执行顺序详解
前言 虽然大家知道async/await,但是很多人对这个方法中内部怎么执行的还不是很了解,本文是我看了一遍技术博客理解 JavaScript 的 async/await(如果对async/await不熟悉可以先看下这篇文章)后拓展了一下,我理了一下await之后js的执行顺序,希望可以给别人解疑答惑,先简单介绍一下async/await. async/await 是一种编写异步代码的新方法.之前异步代码的方案是回调和 promise. async/await 是建立在 promise 的基础上
-
Go中init()执行顺序详解
目录 概述 init()函数 执行时机 概述 init()一般用来做一些初始化工作, go允许定义多个init(),根据init()重复场景不同,可以分为 同文件 单文件中定义多个init() 同模块 同模块下不同文件中定义了多个init() 子模块 本模块和子模块都包含init() 跨模块 多个被引用模块中均含init() 要点秘诀: 涉及引用时,先加载的先执行 同一文件中,先定义的先执行 init()函数 init()函数没有参数,也没有返回值. init()函数在程序运行时,自动自动被调用
-
PHP用continue跳过本次循环中剩余代码的注意点
前言 大家都知道,在PHP中continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环.一定要注意的是,用了continue要用";"来隔开其他的代码,要不可能导致错误! continue用法: <?php for ($n = 0; $n < 5; $n++) { if ($n == 2) continue; echo "$n\n"; } ?> 输出结果: 0 1 3 4 很显然,当$n等于2的时候,被跳过了输出
-
详解JavaScript for循环中发送AJAX请求问题
首先说,出现这个问题的场景是很少见的,因为有太多更好解决方法.今天搞ajax的时候,一个有趣的地方,,每个迭代中都要发送一个get请求,因为迭代的速度太快,一个请求还没有完成就进行下一个迭代,在chrome和ff上,除最后一个请求外,其它请求都被取消了.所以该怎么办呢?设置延时(不太好)还是其他办法? 办法有很多,比如设置休眠,迭代等等, 我采用的是另外两种解决办法. 一.同步的ajax请求,而ajax请求默认是异步的,所以要设置为false. function creatXMLHttpRe
随机推荐
- jquery弹出关闭遮罩层实例
- iOS 点击图片放大效果的实现
- Oracle 如何创建和使用全文索引
- 给Python中的MySQLdb模块添加超时功能的教程
- Android通过原生APi获取所在位置的经纬度
- MySQL服务器连接过程浅析
- PHP实现简单聊天室(附源码)第1/2页
- 12个iOS技术面试题及答案总结
- python的keyword模块用法实例分析
- 在 Ubuntu 15.04/CentOS 7 中安装 Lighttpd Web 服务器的方法
- ubuntu kylin 14.10下多个mysql 5.7.14安装教程
- javascript写的一个表单动态输入提示的代码
- Java用三元运算符判断奇数和偶数的简单实现
- Android Studio使用小技巧:提取方法代码片段
- 详解Java 中程序内存的分析
- python使用mysql数据库示例代码
- Python下使用Scrapy爬取网页内容的实例
- Webpack4+Babel7+ES6兼容IE8的实现
- Android实现支付宝AR扫描动画效果
- Python定义二叉树及4种遍历方法实例详解