今天我要跟大家讲的是,脚本中最重要的内容,循环运行的使用。脚本中通过循环可以大大减少代码,还可以完成很多本来做不到的事情。这个功能是写脚本必须学会的。

循环分为好多种,比较常见的有while,for循环等。下面我们就来挨个介绍吧。

1.while循环

while循环是最基本的一种循环用法,也是最简单的。语法是while(判断内容){运行内容}    运行内容在,循环中,也叫循环体。判断内容如果成立,就运行循环体的内容。判断内容是布尔值,比如while(true){循环体}这样就会无限运行循环体里的内容,因为判断内容一直为true没有变过。

比如写个示例,我要循环打印字母a到日志,那么代码为while(true){log(“a”);}运行后就可以看到日志内在疯狂的打印出字母a了。如果不想运行这么快,可以在每次log之后加一个sleep进行延时,比如while(true){log(“a”);sleep(1000);}这样就每秒打印一次a字母了。

只是限定死循环,再实际中完全没有作用因为这样就直接进入循环运行后,下面的代码完全运行不到了。我们现在一起想,如何做出循环限定次数,我们想想要达到定量循环,那就是,达到第几遍运行时,要让判断内容不成立,这样运行到那一遍时,就运行终止了。那我们可以设置一个变量,每循环一次都增加1,然后判断是否到那和值。这个代码的具体实现方法如下:

【免root脚本制作教程】代码循环运行(Auto.js入门教程-5)
  每次运行,第七行会把i的值修改成比i大1的值,也可以用i++来直接代替该功能。当运行到第9遍时,变量i从9变到10,然后判断出10并不小于10,所以停止这次循环。另注:这一个循环里面内容共循环10次,i分别从0到9。但是每次做定量循环如此常用的功能都要这么写非常麻烦,所以就有了一种新功能for循环,详情请看下面的内容。
 2.for循环的基本使用
 
for循环几乎可以说是为定量循环功能量身定做的一个功能。基本语法为for(语句1;判断内容;语句2){循环体}    这个语句在运行的时候系统会先运行语句1,注意,语句1只运行这一遍,不会循环,然后判断内容如果为true,就运行循环体,循环体运行完后,运行语句2,语句2运行完后就,会到判断如果为true,继续进行循环。
    直接说可能有点抽象,我们举个例子理解这个功能,把上面定量10次循环的示例转成for循环来写会编程for(var i=0;i<10;i++){log(“a”);}    就这么一句,解决了上面之前5行的内容。我们根据for循环运行原理理解一下,他先运行语句1,也就是创建了一个变量i值为0,然后判断i是小于10,于是运行了循环体代码 输出字母a,然后再运行语句2把i的值增加1,一直循环到第十遍,i的值为10,判断不成立,结束这个循环。也就是说for循环做定量循环,语句1用来创建循环次数的变量,判断内容用来设置循环次数,语句2用来每次循环增加循环变量。这样里面的内容就会定量循环了。
 

    那我们来试试如何用for循环按顺序输出1,3,5,7,9,在循环中,只有循环变量的一直在增加的如果要输出等差数列,肯定是在循环中把循环变量输出出来。那我们根据题目来看,第一个要打印的是1,所以循环变量的初始值肯定设置为1,然后最大要输出到9,所以判断内容中,要设置循环变量小于等于9,注意,如果写小于9的话.,9就不会输出了,要写小于等于,然后这个数列每输出一遍循环变量要增加2,所以语句2要让循环变量增加2,但是变量++这个功能只能用于增加1,所以我们完整写,是变量等于变量加二。那思路完成了,我们来看看代码吧:

  for循环定量输出是不是很方便呢,小白就多练练手吧。
     3.循环语句的默认值
for循环和while不一样,他另一个方便的地方在于,他有默认值。如果while里面判断内容不写肯定会报错,而for不会。for循环语句第一个如果空着,默认不执行,第二个不输入,默认为true,即无限循环,第三个空着也默认不执行。所以for(;;){循环体内容}也可以做无限循环使用。虽然可以省略语句内容,但是for循环后面括号里的两个分号,必须不能省略,不然也会报错。
4.break和continue对循环操作的使用
      
在循环中,还有另一个重要的功能就是break和continue,有了这两个功能后,循环将会更加方便,和实用。
  

break的作用是,终止整个循环,运行了这段代码直接停止整个循环,然后当然就去运行之后的内容了。比如,我们还可以用另一个方法做定量循环:

  当判断循环变量加到10后就运行if语句里的break,停止循环,不是10当然就不运行。当然,运行了break之后,就算当前那次循环,在break后面的语句也不会运行了。
 
continue的作用是进入下次循环,运行了这个代码后,当前循环continue后面的代码内容都不会运行,直接进入下一次循环。我们直接来看示例:

continue进入下次代码

continue进入下次效果

  我们通过示例可以看到,他只打印了continue前,为什么没有打印continue后的内容呢。他开始循环,运行打印continue前,然后运行到了continue,这时,进入了下一次循环,并没有运行到后面的内容,所以又运行了输出continue前,然后再进入下一次循环,等待。看了这个示例,应该能理解用法咯。
 5.循环内变量的生命周期
    

在循环内也可以创建变量,但是我们要是循环运行创建变量,会不会因为设置的名字相同的变量,导致报错呢,答案是不会的,因为在循环中创建的变量,当这次循环结束,系统会自动销毁这个变量。当然,因为自动销毁,下一次循环也没法调用上次循环里创建的变量。而在循环结束后,也没有办法获取循环中的变量。那我们,如果要在循环外获取到循环内处理的变量怎么办呢,那只有在循环前创建之后要获取的变量,这一个办法。使用循环前,要记得根据需求,提前设置变量咯。ps:for循环中的语句1中创建的变量是在循环前运行的,所以可以在循环后直接调用。6.do while循环

这个循环,是比较少用的一个循环,他的语法是:do{循环体}while(判断内容);    他的用法和while差不多,区别就是,他会先运行循环体内容,然后再判断内容,看看要不要继续循环运行循环体。那他和while循环的区别在哪呢。那就是,就算判断内容一开始就为false,他也会先运行一次循环体语句。循环体语句至少会运行一次。

 7.setInterval循环
    
这个循环的功能是定时循环,也就是每运行一次循环体,会等待一段时间。他的语法是setInterval(function(){循环体},延时);    循环体内容,也不用多说了。这个循环的问题在于,他并没有判断内容,也就是说,要停止这个循环只能用上面提到的break功能,后面输入的延时,是每次循环体内容运行后,等待的时间,单位是毫秒,所有程序里的时间,单位一般都是毫秒。这个功能一般比较少用,主要用处在于ui线程上的循环处理,在ui中,以上的功能,只能在新线程中运行。在之后的教程中还会详细讲解。
        
本期内容就讲到这,循环是脚本中必不可少的内容之一,这期内容非常重要,大家要多自己去练习。
给大家留个思考题目,如何通过循环,让脚本自动运行并打印出1加到666666的和。选择最适合的循环方式。

发表评论

后才能评论