收藏
回答

for循环bug

问题模块 框架类型 问题类型 API/组件名称 终端类型 操作系统 微信版本 基础库版本
API和组件 小程序 Bug for循环 客户端 Android 6.6.6 2.0.0

在js文件写for循环,如下的形式:

for (let i = i;i<5;i++){
    console.log(i)
}


不会报错。


按照道理,他会运行报错,报一个ReferenceError的错误。

我因为翻译Java代码为js代码无意写错发现的。

最后一次编辑于  2018-05-24  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏投诉关注问题回答

4 个回答

  • 江成為
    江成為
    2018-05-25

    我来回答一下吧 开发者工具使用的babel 将es6 转 es5

    这行代码转义成为


    for (var i = i; i<5; i++){
        console.log(i);

    }

    在javascript解析中,var i = i 由于i没有声明,会在全局声明一个i并赋值为undifined,在for 循环中,由于i为undifined,undifined 和数字比较为false,所以既不进循环也不报错


    2018-05-25
    赞同 10
    回复 1
    • 成
      2018-05-25
      大兄弟坐稳,顶你上去
      2018-05-25
      回复
  • 牛
    2018-05-24

    你确定进入for循环了吗

    2018-05-24
    赞同
    回复 6
    • 黎伟杰
      黎伟杰
      2018-05-24
      他没有进入啊,但是那个i按照js语法,会报一个引用错误啊,因为没有定义就使用了。
      2018-05-24
      回复
    • 牛
      2018-05-24回复黎伟杰
      你不是写了let吗,你把let去了就报错了
      2018-05-24
      回复
    • 黎伟杰
      黎伟杰
      2018-05-24回复
      在声明的同时引用,不就会报引用错误吗?我单纯写js代码就会报这个错误。比如在webstorm跑或者在Chrom里面跑,这段代码都会出错的,let是需要声明为变量的,不能去掉。
      2018-05-24
      回复
    • 牛
      2018-05-24回复黎伟杰
      那就不会进入啊,i<5判断进不去
      2018-05-24
      回复
    • 黎伟杰
      黎伟杰
      2018-05-24回复
      从语法层面来说,这个语句就是错误的语句。
      2018-05-24
      回复
    查看更多(1)
  • 成
    2018-05-24

    i=i

    2018-05-24
    赞同
    回复 5
    • 黎伟杰
      黎伟杰
      2018-05-24
      对啊,这就是问题,这段代码本应该报错,但是他没有报错。
      2018-05-24
      1
      回复
    • 牛
      2018-05-24回复黎伟杰
      没错吧,i=i 等于undefined
      2018-05-24
      回复
    • 成
      2018-05-24回复黎伟杰
      按道理是会报错的,估计是小程序小程序的框架里没捕获到错误,具体原因不知;帮顶一下
      2018-05-24
      回复
    • 黎伟杰
      黎伟杰
      2018-05-24回复
      =_=,我把一个核心1000多行的java文件翻译成js,运行起来了,有些时候结果不对,找原因找了两天,原来是上面这个问题,因为刚好是边界,所以一开始没有发现,真的是坑。
      2018-05-24
      回复
    • 成
      2018-05-24回复黎伟杰
      多么痛彻的领悟。。。
      2018-05-24
      回复
  • 7777777
    7777777
    2018-05-26

    兄得!你这个怎么可能会执行呢

    2018-05-26
    赞同
    回复