kkwait23 2019-04-11 18:48 采纳率: 50%
浏览 1965
已采纳

为什么会显示未定义,该怎么解决?

想用js实现用一串文字让他们每隔一段时间一个字一个字蹦出来。

图片说明

我里面用的一个字符串为
养生知识,当我输入文字的时候让他们间歇性的出现
,但我使用的是延时定时器,因为setInterval的话还要让他停止我就没用他
图片说明

不知道为什么显示的是未定义?

  • 写回答

3条回答 默认 最新

  • 毕小宝 博客专家认证 2019-04-12 09:29
    关注

    根源是js的单线程,只有for循环执行完成后、主线程空闲后才会执行setTimout回调函数,此时i已经是4了,是name的越界下标,当然就是undefined。
    修改代码添加必要的输出信息如下:

    var name="养生知识";
    for(var i=0;i<name.length;i++){
       console.log("i is"+i+",value is:"+name[i]);
       setTimeout(
          function(){
             console.log("i is:"+i);
             console.log("name is"+name);
             console.log("name[i] is"+name[i]);
          }
       );
    }
    

    执行看到结果:
    图片说明

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境
  • ¥30 关于#java#的问题,请各位专家解答!
  • ¥30 vue+element根据数据循环生成多个table,如何实现最后一列 平均分合并
  • ¥20 pcf8563时钟芯片不启振