Javascript: 基本 for 循环不起作用

Javascript: Basic for loop is not working

是否有任何原因导致以下内容不起作用:

for (i=0;i < someArray.length;i++) {
    if (someArray[i].indexOf("something") !== -1) {
        //do something here
    }
}

最基本的 "for" 循环可能。但它不起作用。在第一行(循环声明,而不是循环内部),我得到 "Uncaught reference error; i is not defined."

我在一个 Chrome 选项卡中打开此页面,并在另一个选项卡中打开该页面的另一个早期版本。在另一个选项卡中,这个循环工作得很好;在第一个选项卡中,此代码会引发错误。

编辑 - 2015 年 7 月 2 日

关于严格模式的回复很有帮助。在阅读了一些内容并浏览了代码之后,我已经掌握了正在发生的事情。

令人困惑的一点是两个版本的代码看起来都像这样,但有一些细微差别(requirejs 模块):

define(
    'viewModels/someViewModel',
    ['dependency1', 'dependency2', 'dependency3'],
    function(dep1, dep2, dep3) {

        "use strict";

        function SomeViewModel(arg1, arg2) {
            var self = this;
            self.initialize();

            self.removeRefinement = function(refinementString) {
                var refinementArray = refinementString.split("&");

                for (i=0;i < navigationArray.length;i++) { //<-- error

                }
            }
        }
    }
);

一个版本抛出引用错误。一个没有。

这是一个包含许多其他页面和 Javascript 文件的大型 Web 应用程序。我唯一能想到的是,在一个版本的代码中,也许我在应用程序的其他地方无意中被全局定义了,那里没有启用严格模式。在 运行 断点并检查 "window" 之后,我发现这正是正在发生的事情。

谢谢=D

当你声明一个变量时,它必须像这样声明var i = 0;

for 循环如下所示:

JavaScript

for(var i = 0; i == 10; i++)
{

}

如果你在strict mode,你会得到错误Uncaught reference error; i is not defined.如果你不在严格模式,你不会得到错误。

这将引发错误

'use strict'
var someArray = ['aaa', 'bbb', 'ccc'];

for (i=0;i < someArray.length;i++) {
  console.log(i)
  if (someArray[i].indexOf("something") !== -1) {
    //do something here
  }
}

这不会

var someArray = ['aaa', 'bbb', 'ccc'];

for (i=0;i < someArray.length;i++) {
  console.log(i)
  if (someArray[i].indexOf("something") !== -1) {
    //do something here
  }
}