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
}
}
是否有任何原因导致以下内容不起作用:
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
}
}