JavaScript循环结构

68 阅读1分钟

循环结构

掌握循环结构,实现一段代码重复执行

断点调试

学会通过调试检查代码

作用:学习时可以帮助更好的理解代码运行,工作时可以更快找到bug

浏览器打开调试界面 按F12打开开发者工具 点到sources一栏

选择代码文件 断点:在某句代码上加的标记就叫断点,当程序执行到这句有标记的代码时会暂停下来

1648434455903.png

1648434554542.png

while循环

掌握while循环语法,能重复执行某段代码

循环:重复执行某段代码, 而 while : 在…. 期间

  1. while 循环语法

释义: 跟if语句很像,都要满足小括号里的条件为true才会进入执行代码

while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出

  1. while 循环注意事项:

循环的本质就是以某个变量为起始值,然后不断产生变化量,慢慢靠近终止条件的过程。 所以,

循环需要具备三要素

变量起始值

终止条件(没有终止条件,循环会一直执行,造成死循环)

变量变化量(用自增或者自减)

    <script>
        // 变量初始值
        let i = 1
        // 循环的终止条件  大于10才会终止
        while(i <= 10){
            document.write('月薪过万 <br>')
            // 变量需要改变 当循环之后 后置加1 超过10 循环停止
            i++
        }
    </script>

让循环变为可控 由用户输入:

在循环外添加循环次数的变量 由用户输入

    <script>
        let num = +prompt('请输入你的次数')
        let i = 1
        while( i < num ){
            document.write(`月薪过万 ${i} <br>`)
            i++
        }
    </script>

页面弹框演示:问答流

需求:页面弹出对话框,‘你爱你的家人吗’,如果输入‘爱’,则结束,否则一直弹出对话框 分析:

①:循环条件: 不是爱则一直循环

②:循环的时候,重新让用户输入

    <script>
        // 初始值为空
        let love
        // 循环条件里设置终止条件
        while(love !== '爱' ){
            // 循环里设置弹窗 给love赋值跟循环条件一样的值 
            // 当弹窗输入的值符合条件 终止循环 反之继续
            love = prompt('拜月:你认为世间有爱吗,你爱你的家人吗')
        }
    </script>

案例:计算 1到100 偶数的和

核心思路: 声明累加和的变量 sum

首先利用if语句把 i 里面是偶数筛选出来

把 筛选的 i 加到 sum 里面

    <script>
        let i = 1
        sum = 0  
        while(i <= 100){
            // 左边满足条件了等于 true 采取执行右边的代码
            // 也就是i 在偶数的情况下生效 2 4 6 8 10 
            //  (i % 2 ===0) 这行代码不能直接执行 满足某些条件才能执行
            (i % 2 ===0) && (sum += i);
            i++;
            // 无论当前的i是偶数还是奇数  i++都要执行 必须进行下一轮的循环
        }
        console.log( '你要的1-100的偶数和', sum); 
    </script>

案例 :计算 1到100 的总和并输出

核心思路: 声明累加和的变量 sum 每次把 i 加到 sum 里面

    <script>
        // 初始变量为1
        let i = 1
        // sum 赋值为0
        sum = 0  
        while(i <= 100){
            // 第一次 sum = sum + i (0+1=1)  结果出来后 i再进行自增 此时为2
            // 第二次 此时i = 2  sum=1 2+1=3 sum的值为3 i再进行自增 此时为3
            // 第三次 此时i = 3  sum=3 3+3=6 sum的值为6 i再进行自增 此时为4 以此类推
            // sum = sum + i
            // 两种方式计算总和 简写
            sum += i
            i++
        }
        console.log(sum);
    </script>

案列:综合案例 简易atm取款机

1648741696406.png

    <script>
        // 设置一个存储的金额
        let money = 10000
        // 设置一个 空类型 undefined 
        let day
        // 设置一个循环条件
        while(day !== 4){
            // 疯狂弹窗 
            // 一定要让变量发生变化
            day = +prompt(`请选择你的操作:
            1、取款
            2、存款
            3、查看余额
            4、退出`)
            // 开始对用户的输入做判断 点击不同的数字开始不同的功能
            if (day === 1){
                // 弹出存取金额的功能 设置一个num1 表示赋值提取的数字金额
                let num1 = +prompt('请输入你要取多少金额')
                // 已有的金额 减去 提取的金额 最后得出money 所剩的余额
                money -= num1
                alert(` 你的余额 ${money}`)
            }
            else if (day === 2){
                 // 弹出存取金额的功能 设置一个num2 表示赋值存入的数字金额
               let num2 =  +prompt('请输入你要存多少金额')
               // 已有的金额 减去 存入的金额 最后得出money 的余额
                money += num2
                alert(` 你的余额 ${money}`)
            }
            else if (day === 3){
                alert(money)
            }
            else if(day === 4){
                alert('退出成功')
            }
        }
    </script>

不一定要弹窗 设置 console.log( ); 也可 直接在控制台 查看

for循环

for循环语法

也是重复执行代码 好处:把声明起始值、循环条件、变化值写到一起,让人一目了然

    <script>
        for (声明记录循环次数的变量; 循环条件;变化值) {
            循环体
        }
    </script>

for循环和while循环有什么区别呢:

当如果明确了循环的次数的时候推荐使用for循环

当不明确循环的次数的时候推荐使用while循环

演示案例 :利用for循环输出1~100

    <script>
        // for循环的代码 要去记住
        /* let i = 1; 记录循环的次数变量
        循环条件:i 要满足什么条件 循环才会被执行
        变化值 i++

        运作的过程
        1、先执行 let i = 1;
        2、再执行 i <= 100 的判断
        3、执行console.log(i);
        4、再去执行 i++;
        5、去执行判断 i <= 100
        6、又去执行console.log(i);
        7、再去执行 i++;
        8、以此类推 直到i等于100 循环条件终止
         */
        for (let index = 1; index <= 100; index++) {
            console.log(index);
        }
    </script>

演示案例 :也是用循环做出 1到100 的偶数和 for循环演示

    <script>
        sum = 0
			// 判断偶数和的条件
        for (let i = 1; i <= 100; i++) {
            // 两种计算方式  
            // 是偶数了才输出
            if(i % 2 === 0){
                sum += i
            }
            // if((i % 2 === 0) && (sum += i) );
            // console.log(sum);如果加在循环里 每次循环都会打印一次
            // console.log(sum);
        }
        console.log(sum);
    </script>

案例:循环星星⭐

    <script>
        // 用for循环打出五百个小星星
        // for (let i = 0; i <= 50; i++) {
        // 直接输出打印 一次一次的打印在页面上
        //     document.write('⭐')
        // }
        // 声明一个变量 做一个容器装星星
        let star = "" 
        for(let i = 0; i <= 50; i++){
            // star="⭐"+star
            // 把星星装在容器里面 然拼接一次输出在页面上
            star += "⭐"
        }
        document.write(star)
    </script>

for 循环嵌套

一个循环里再套一个循环,一般用在for循环里

    <script>
        for (声明记录循环次数的变量; 循环条件;变化值) {
            for (声明记录循环次数的变量; 循环条件;变化值) {
            	循环体
        	   }
        }
    </script>

循环嵌套演示

计算: 假如每天记住5个单词,3天后一共能记住多少单词? 拆解:

第一天 : 5个单词

第二天: 5个单词

第三天: 5个单词

    <script>
        // 设置外部循环条件 document.write 输出展示
        for (let index = 1; index <= 3; index++) {
            document.write(`第${index}天 <br/>`)
            // 再设置内部循环条件
            for (let index1 = 1; index1 <=5; index1++) {
                document.write(`记住第${index1}个单词 <br/>`)
            }
        }
    </script>

与上个案例相同 但改为由用户输入控制循环条件

    <script>
        // 用户输入天数 单词数  day 天数  
        let day = +prompt('请选择你要读的天数')
        let num = +prompt('请选择你要读的单词数')
        for (let index = 1; index <= day; index++) {
            document.write(`第${index}天 <br/>`)
            for (let index1 = 1; index1 <= num; index1++) {
                document.write(`记住第${index1}个单词 <br/>`)
            }
        }
    </script>

九九乘法表:

        span{
            border: 1px solid #000;
            display: inline-block;
            width: 100px;
            height: 25px;
            padding: 2px 10px;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
    <script>
        // 把原本的倒三角星星复制过来 星星就相当于1x1=1本身 
        // 先把行数列数显示出来 再把里面的⭐设置我们想要的数字
        // 外部循环的是当前的行数
        for (let index = 1; index <= 9; index++) {
            // 内部循环的是当前的列
            for (let index1 = 1; index1 <= index; index1++){
                //   1  x  1  =  1
                // 行数 x 列数 = 值
                // 设置一个它们相乘后的值
                let num = index1 * index
                // 把里面的⭐替换成行数x列数=值
                document.write(`<span> ${index1} x ${index} = ${num}</span>`)
            }
            document.write(`<br/>`)
        }
    </script>

switch循环

switch-case 功能和 if else-ifelse一模一样

    <script>
        // switch-case 功能和 if else-ifelse一模一样

        // switch-case-break-defaul
        // 1 switch(day) 想要对 day做判断
        // 2 case 1 : day ===1 满足条件 
        // 3 break 打断当前的case
        // 4 default 如果以上的 case 都不满足,最终 执行default里面的代码
        let dey = 1
        switch (dey) {
            case 1:
                // 执行1的业务逻辑
                console.log('断手');
            case 2:
                console.log('断脚');
            case 3:
                console.log('断手断脚');
                break;
            // 以上不满足执行以下代码
            default:
                console.log('逗你玩的');
                break;
        }
    </script>

跳出循环

循环结束: continue:结束本次循环,继续下次循环

    <script>
        let sum = 0
        for (let i = 1; i <= 100; i++) {
            if (i % 2 !== 0) {
          // 奇数
          // 中止这一次,继续下一次
            continue
        }
        sum += i
      }
      console.log(sum)
    </script>

break:跳出所在的循环

    <script>
        // 控制循环结束
        /* 1、continue 跳过本次循环 继续开启下次循环
            continue想要跳过这个循环 不一定通过它
            我们自己的 if else 也能实现类似功能 */
        /* 2、break 直接循环结束 不玩了
            也不是必须 我们也是可以通过 if else 来实现它的功能
            但是如果可以 使用break的话 尽量使用它 (性能更加好)因为break 会终止剩下的循环
        */
        for (let index = 1; index <= 10; index++) {
            // 如果当前的index = 5 , 就不再往下循环了 就终止循环
            if(index === 5) {
                // 终止第五次循环 
                // break;
                // 跳过5 继续下次循环
                continue
            }
            console.log(index)
        }
    </script>

奇数

    <script>
      /*如果当前的index 是一个奇数  下面的代码就不要再运行了 开启下一个循环
      */

      // 只显示 奇数 单数
      for (let index = 1; index <= 10; index++) {
        // 判断当前的index是不是奇数
        if (index % 2 !== 0) {
          console.log(index);
          continue;
        }
      }
    </script>