老师 我想请问下我这个代码哪里错了呀 谢谢老师

老师 我想请问下我这个代码哪里错了呀 谢谢老师

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>

<body>

    <script>

   

        var a=[1,2,[3,4]];

        var b=[];

        function deep(){

        for(let i=0;i<a.length;i++)

        {

            if(isNaN(a[i]))

            {

                deep(a[i]);

            }

            b.push(a[i]);

        }

   

       

    }

    deep();

        console.log(b);

    </script>

</body>

</html>

我觉得会变成[1,2,3,4] 但是她却报错了

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕慕子 2022-07-11 10:02:16

同学你好,因为deep函数内部的for循环条件为前面定义的数组a的长度,所以再次调用deep方法,传入a[i]参数,并不会影响for循环的条件,代码陷入死循环,导致无法实现效果。

建议结合注释修改:

https://img1.sycdn.imooc.com//climg/62cb849b092cf6df06930763.jpg

结果如下:

https://img1.sycdn.imooc.com//climg/62cb84a709b4db7904700166.jpg

祝学习愉快~

  • 提问者 慕仙0240544 #1

    老师 想请问下关于for循环里的i问题 请问JS里的i不是全局变量吗 进了递归里的for循环里的i会改变外面的i吗 谢谢老师

    2022-07-11 10:40:23
  • 好帮手慕慕子 回复 提问者 慕仙0240544 #2

    同学你好, 问题解答如下:

    1、i是否是全局变量,与具体的声明方式有关,同学书写的代码,i是在deep函数内部使用let声明的,不属于全局变量,而是局部变量。

    2、不会改变。

    祝学习愉快~

    2022-07-11 10:49:55
  • 提问者 慕仙0240544 回复 好帮手慕慕子 #3

    1 老师 但是如果为把let换成了var它也不会改变 请问这是为啥 明明var i是全局变量的

    2 老师 我想请问下为啥把您的arg换成a就会报错 谢谢老师

    2022-07-11 10:53:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师