【问题标题】:JavaScript Infinite "for-loop" [closed]JavaScript无限“for-loop”[关闭]
【发布时间】:2018-06-26 01:27:45
【问题描述】:

编辑:看起来我的发帖方式搞砸了。为了将来对遇到此问题的其他人有所帮助,我将清理此问题。

我最近一直在学习 JavaScript,但遇到了一个问题 - 我认为这是一个错误,但我找不到任何关于它或如何修复它的信息。出于某种原因,我陷入了一个无限的 for 循环,在那里我看到了不断的“0”而不是预期的“0 1 2”。这是我目前的设置:

for (var i = 0; i < 2; i = i++) {
    console.log(i)
}

任何帮助将不胜感激。为方便起见,我拍了一段视频(20 秒左右)。 [我意识到视频对那些在阅读后试图提供帮助的人没有帮助,但我认为它仍然可以帮助那些与我有同样问题的人。因此,我决定仅出于这个原因保留视频链接。]

作为额外信息,我通过 Windows 10 WSL(Windows 的 bash)、Ubuntu 16.04 运行了这个。我正在使用 Visual Studio Code。

https://photos.app.goo.gl/aJEgY3hEJVTMwRmK6

提前谢谢!

【问题讨论】:

标签: javascript for-loop


【解决方案1】:

这种行为是预期的:

Increment (++)

自增运算符将其操作数递增(加一)并返回一个值。

如果使用后缀,操作数后面有运算符(例如,x++),则返回递增前的值。

如果在操作数之前使用运算符前缀(例如,++x),则返回递增后的值。

i++ 的键返回递增前的值

另一个关键是 JS 中的基元是不可变的,因此当您分配一个数字时,会创建一个新数字并将其保存在该变量中。

因此,您的循环说 i = 0,然后设置 i = 0,然后将之前的 0 设置为 1。

执行这种循环的通常方法是只增加值而不重新分配:

for (var i = 0; i < 2; i++) {
    console.log(i)
}

【讨论】:

    【解决方案2】:

    删除 i =

    另外,您可能希望在 for 之外声明变量 i,如下所示:

    var i;
    
    for (i = 0; i < 2; i++) {
        console.log(i)
    }
    

    我更喜欢在 for 中使用 var 的原因是它不会创建一个仅限于 for 循环范围的变量,它仍将处于同一级别。

    【讨论】:

    • 没有理由也不需要在循环外声明i
    • 正如@FredStark 所指出的 - 在 for 语句中使用 var 很好。我更喜欢把它放在外面的原因是变量的声明不限于 for 循环。也编辑了我的答案。
    • 这是一个很好的理由。它更明确地说明了该变量所在的范围!
    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    相关资源
    最近更新 更多