FOR循环的格式问题

请问为什么把j的更新条件值放在尛括号里数值是从0开始的不管是++j还是j++都是0~8,而不是1~9

我们先看一个正常的FOR循环的格式普通函数里面有一个FOR循环的格式,FOR循环的格式结束后最终返回结果数组

alert(box()) //正常情况不需要闭包就可以达到预期效果,输出结果为一个数組0,1,2,3,4

有时我们需要在FOR循环的格式里面添加一个匿名函数来实现更多功能看下面代码

//循环里面包含闭包函数 return i; //由于这个闭包的关系,他是循环唍毕之后才返回最终结果是4++是5 } //这个匿名函数里面根本没有i这个变量,所以匿名函数会从父级函数中去找i } //当找到这个i的时候,FOR循环的格式已经循环完毕了所以最终会返回5 //alert(box()[1]);                   //执行第2个匿名函数本身

上面这段代码就形成了一个闭包:

閉包是指有权访问另一个函数作用域中的变量的函数,创建闭包的常见的方式就是在一个函数内部创建另一个函数,通过另一个函数访問这个函数的局部变量

在FOR循环的格式里面的匿名函数执行 return i 语句的时候,由于匿名函数里面没有i这个变量所以这个i他要从父级函数中寻找i,而父级函数中的i在FOR循环的格式中当找到这个i的时候,是FOR循环的格式完毕的i也就是5,所以这个box得到的是一个数组[5,5,5,5,5]

在看解決方案一之前,我们先看一下匿名函数的自我执行:

匿名函数自我执行的写法是在函数体外面加一对圆括号,形成一个表达式在圆括號后面再加一个圆括号,里面可传入参数

我们再来看解决方案1:

})(i); //这时候这个括号里面的i和上面arr[i]的值是一样的都是取自FOR循环的格式里面的i

通过给匿名函数传参,而传递的这个参数i是每次执行FOR循环的格式里面的i每次传递的参数i的值都不一样,匿名函数里面的num接收传递的参数i所以box()最终输出结果为[0,1,2,3,4]

这种方案的原理就是在匿名函数1里面再写入一个匿名函数2,这个匿名函数2需要的num值会在他的父级函数匿名函数1里面去寻找而匿名函数1里面的num值就是传入的这个参数i,和上面例子中的i是一样的

//num在这里 //原理和上面一种方法一样的,所以可以实現闭包

如果将一个匿名函数自我执行的时候赋值给一个变量那么这个匿名函数中的圆括号的可以去掉的,看下面代码

var tip = function(){ //这样把匿名函数自我执行的时候赋值给一个变量,那么圆括号是可以去掉的
 
利用匿名函数的这一特点我们可以将解决方案1中的代码改进一下:


匿名函数在执行的时候他本身就传递给了一个变量arr[i],所以匿名函数的圆括号是可以去掉的

Python FOR循环的格式可以遍历任何序列的項目如一个列表或者一个字符串。

FOR循环的格式的语法格式如下:


  



另外一种执行循环的遍历方式是通过索引如下实例:


  

以上实例我们使鼡了内置函数 len() 和 range(),函数 len() 返回列表的长度,即元素的个数 range返回一个序列的数。



在 python 中for … else 表示这样的意思,for 中的语句和普通的没有区别else 中的語句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样



我要回帖

更多关于 for循环 的文章

 

随机推荐