JS第四天 which与for循环 和循环嵌套

322 阅读1分钟

JS循环语句 (特别重要)

断点调试

​ 作用:能够很好的理解代码运作的流程并且进行调试,在工作中找BUG

​ 按f12 打开调试工具 点击源代码

​ 选择代码文件

1648433364298

​ 想要代码在哪一段运行停止就点击代码前的数字 这个标记叫断点

1648433402565

​ **断点:**当程序执行到这句有标记的代码会暂停下来

while循环

​ 作用:不断重复某一段代码,循环能重复执行某一段代码。

​ 本质:重复执行某一段代码,while :表达为在。。。期间内

while语法:

<script>
        // 循环三大因素
        // 起点
        let i = 0
        // 终点
        while(i<100) {
            document.write(`我循环了第${i}次了`)
            // 自增
            i++
        }
    </script>

三大因素:

​ 1.变量的起始值

​ 2.终止条件 (如果没有终止值 循环会一直执行 造成死循环)

​ 3.变量变化量 (用自增或自减)

调试断点补充:

1.在自增上断点。

1648434921639

2.如果想分析一步一步循环,点击右侧播放,可以让程序走过一遍,再到断点停止。

1648434983188

3.此时观察控制面板和页面,每点击一遍就会执行一次

1648435007012

1648435011756

作用:用于后期观察代码执行到第一次了,查看代码运作的流程并调试

while案例1:

1648435154630

优化案例:用户弹出输入框,用户自己输入要循环几次,页面循环几次

我的代码:

<script>
        let num = +prompt(`请输入循环次数`)

        while (num<=100){
            document.write(`月薪过万<br> `)
            num++
        }
</script>

困难点:我不知道小括号内的取值,当我取值为num>0时代码不执行

while案例2~3:

1648451320351

代码:

<script>
        let i = 1
        let sum = 0
        while(i<=100) {
            sum = sum + i
            i++
        }
        document.write(`总和为${sum}`)
</script>

<script>
        let i = 1
         sum = 0
         while (i<=100) {
             /* if (i%2 === 0) {
                 sum += i;
             }
             无论 奇数偶数 都要执行 */
            
             (i%2 === 0) && (sum += i)
             i++
         }
         document.write(sum)
    </script>

我的思考难点:

​ 1.对于sum=sum+i 不够清晰

​ 第一次进入是:0+1 增加自增 在更新进入第二次循环 0+1+2 直到0+1+2..100

​ 2.对于循环的思路不够清晰

我的理解:

​ sum1 = 0+1

​ sum2 = 1+2

​ sum3 = 3/(0+1+2)+3

​ sum4 = 6/(0+1+2+3)+4

​ ...

​ sum100 = (0+1+2....99)+100

​ 循环也就是一步一步逐步到我们想要的最后一步,然后就跳出循环输出

while案例4:

1648451419854

我的代码:

<script>
        let box,money=0

        while(box!=4) {
            box = +prompt(`请选择你的操作
            1取款 2存款 3多少钱 4退出`)
            if (box===1) {
                let num1 =  +prompt(`请输入取款数量`)
                money -= num1
            }else if (box===2){
                let num2 = +prompt(`输出存款数量`)
                money += num2
            }else if (box===3){
                money=alert(`${money}元`)
            }
        }
</script>

老师解题思路:

​ 1.打开页面 弹出对话框 无限弹窗功能 (循环条件)

​ 2.用户输入内容(根据用户输入的分支结构)

​ 输1弹1 在回到第一个弹窗

​ 输2弹2 在回到第一个弹窗

​ 输3弹3 在回到第一个弹窗

​ 输4退出

​ 3.实现加减的细节 (在分支结构中的细节)

1648451266883

总结

​ 1.当没有头绪,找之前类似案例

​ 2.必须用文字把需求逐步分析出来,梳理脑海的思路

循环-for

for循环语法:

​ 与while语法差不多,不过更加简洁。

1648454482394

<script>
        /* 
        循环的原理
            先执行 let i = 1
            执行 i <= 100 满足条件
            执行 consloge
            执行 i++,
            执行 i <= 100 满足条件
            执行 consloge
            执行 i++
            ......一直循环到不满足条件
         */
        for (let i = 1; i<=100; i++) {
            console.log(i)         
        }
    </script>

案例1(用for):

1648455014557

代码:

<script>
        let sum=0
        for (let i=1; i<=100; i++) {
            if (i%2 === 0 ){
                sum = sum + i  
            }        
        }
        console.log(sum)
        
</script>
案例二:

1648456494211

代码:

<script>
        let s = ''
         for (let i = 0; i < 5; i++) {
         s += '★'
         }
        document.write(s + '<br>')

</script>

不是循环变量的初始值写在for外边

1.明确循环次数用for

2.不明确循环次数用while 如**“!=4”**

退出循环

循环结束:

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

<script>
        /* continute 也就是跳过本代码循环
            也可以通过if-else 实现效果 不一定用 */
        for (let index = 1; index <=10; index++) {
            if(index%2!=0){
                console.log(index)
                continue
            }
            console.log(index)
        }
</script>

​ break:跳出所在的循环

<script>
        /* break表示直接斩断!不循环了
            可以通过if-else 来实现功能
            推荐使用 break 因为直接斩断 优化性能 */
        for (let index1 = 1; index1 <=10; index1++) {
            if (index1 === 5){
                break
            }
            console.log          
        }
</script>

for循环嵌套

1648469464095

for循环应用

需求:

1648469551098

代码:

<script>
        
        // 这是最外层循环 三天
        for (let index = 1; index <=3; index++) {
            document.write(`第${index}天<br>`)
            // 这是三天里面的 每一天背的单词
            for (let index1 = 1; index1 <=5; index1++) {
                document.write(`记住第${index1}个单词<br>`)               
            }            
        }

        /* 思路:第一个外层要背几天 
                每一天要背几个单词 (嵌套在外层背几天)*/
    </script>

解题思路:

​ 1.首先明确外层循环是谁(外层循环要背几天)

​ 2.其次是明确内层嵌套的循环(每天要背几个单词)

增加难度 :几天背几个单词可以由用户决定

<script>
        let num1 = +prompt(`背几天`), 
            num2 = +prompt(`一天背几个`)
         for (let index = 1; index <=num1; index++) {
            document.write(`第${index}天<br>`)
            // 这是三天里面的 每一天背的单词
            for (let index1 = 1; index1 <=num2; index1++) {
                document.write(`记住第${index1}个单词<br>`)               
            }            
        }

        // 思路:终点是确定变量,这里变量是 背的天数 改变成变量
    </script>

**思路:**因为用户决定要背几天和背几个,所以第一步明确变量,把具体值改为变量。