是否有任何原因导致以下内容不起作用:
for (i=0;i < someArray.length;i++) {
if (someArray[i].indexOf("something") !== -1) {
//do something here
}
}
最基本的“for”循环可能。但这不起作用。在第一行(循环声明,而不是循环内部),我得到“ Uncaught ReferenceError ;i 未定义。”
我在一个 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
}
}
}
}
);
一个版本会引发引用错误。有一个没有。
这是一个大型 Web 应用程序,包含许多其他页面和 Javascript 文件。我唯一能想到的是,在代码的一个版本中,也许我无意中在应用程序的其他地方全局定义了它,而严格模式未启用。运行到断点并检查“窗口”后,我发现这正是发生的情况。
谢谢=D
最佳答案
如果您位于 strict mode ,您将收到错误 Uncaught ReferenceError ; i 未定义。
如果您未处于严格模式,则不会收到错误。
这将引发错误
'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
}
}
关于Javascript:基本 for 循环不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172406/