全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 1114|回复: 27
打印 上一主题 下一主题

有偿寻求js大神【已解决】

[复制链接]
跳转到指定楼层
1#
发表于 2021-4-14 08:29:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 qgx 于 2021-4-14 13:09 编辑

js定义了一个 全局let i=0,当作数组下标,用来起始循环输出数组的值,i每次加1(i++),起始循环了几次突然出现i=NaN,导致打印出来数组的值为undefined,望大神解决,不白**。

i变量跟网页中的变量可能重名了,改了变量名问题解决,感谢大神们的提醒。
推荐
发表于 2021-4-14 11:56:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
推荐
发表于 2021-4-14 13:03:14 | 只看该作者
搜一下loop,你网页上的其他js执行了i='loop'之类的语句
推荐
发表于 2021-4-14 12:54:42 | 只看该作者
  1. let msgIndex = 0
  2. let msgs = []

  3. main()

  4. function main() {
  5.   msgs = ['123', '456', '789', 'abc']

  6.   setInterval(sendMsg, 1000)
  7. }

  8. function sendMsg() {
  9.   console.log('msgIndex before', msgIndex)

  10.   if (msgIndex >= msgs.length) {
  11.     msgIndex = 0
  12.   }

  13.   // 开始执行发送消息逻辑
  14.   console.log("开始执行发送消息逻辑 =>", msgs[msgIndex])

  15.   msgIndex++

  16.   console.log('msgIndex after', msgIndex)
  17. }
复制代码

点评

qgx
感谢  发表于 2021-4-14 13:31
2#
发表于 2021-4-14 08:34:54 | 只看该作者
其实你问问题只要表明你要弄个什么什么东西,什么需求,没准能帮的上你,看你这描述,一会儿全局的i,一会儿循环里的i,循环里的i是要小于数组的长度的。
3#
发表于 2021-4-14 08:39:37 | 只看该作者
用 var 不要用 let,let不是全局的。

var的作用域是会提升的,var声明的变量只能是全局的或者是整个函数块的。

let则允许声明一个作用域被限制在块级中的变量、语句或者表达式。

点评

qgx
var也是一样  发表于 2021-4-14 12:00
4#
发表于 2021-4-14 08:52:50 | 只看该作者
上代码
微信图片_20210414085225.png (21.25 KB, 下载次数: 0)

点评

qgx
老哥给看看  发表于 2021-4-14 11:58
5#
 楼主| 发表于 2021-4-14 11:55:49 | 只看该作者
let i=0,msgs=[];
function main(){
        msgs=['123','456','789','abc'];
        setInterval(sendMsg,5000);

}
function sendMsg(){
        console.log("进入函数i的值等于"+i);
        if(i==msgs.length){
                i=0;
                发送消息语句...
                console.log(msgs[i] + "执行了if语句");
                i++;
        }else{
                发送消息语句...
                console.log(msgs[i] + "执行了else语句");
                i++;
        }
        console.log("函数执行完i的值等于"+i);

}
--------------------------------
就是很简单的代码,脚本嵌入网页执行,结果
--------------------------------
进入函数i的值等于0
123执行else语句
函数执行完i的值等于1
进入函数i的值等于1
456执行else语句
函数执行完i的值等于2
进入函数i的值等于2
789执行else语句
函数执行完i的值等于3
进入函数i的值等于3
abc执行else语句
函数执行完i的值等于4
进入函数i的值等于4
123执行if语句
函数执行完i的值等于1
进入函数i的值等于loop
undefined执行else语句
函数执行完i的值等于NaN
进入函数i的值等于NaN
undefined执行else语句
函数执行完i的值等于NaN
进入函数i的值等于NaN
undefined执行else语句
函数执行完i的值等于NaN
--------------------------------
使用var声明也是这个问题,有时可以完整循环完几次才出问题,有时一开始就出问题,各位老哥看看哪里的问题
7#
发表于 2021-4-14 11:56:32 | 只看该作者
or 1 or

点评

qgx
啊?  发表于 2021-4-14 12:12
8#
发表于 2021-4-14 11:59:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
9#
 楼主| 发表于 2021-4-14 12:02:11 | 只看该作者
website 发表于 2021-4-14 08:34
其实你问问题只要表明你要弄个什么什么东西,什么需求,没准能帮的上你,看你这描述,一会儿全局的i,一会 ...

老哥,看看
10#
 楼主| 发表于 2021-4-14 12:14:43 | 只看该作者
kne 发表于 2021-4-14 11:59
跟你执行的网页有关系吧 我这一直正常循环

有没有解决办法,比如改代码?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2025-12-17 03:18 , Processed in 0.099581 second(s), 23 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表