【发布时间】:2011-12-05 13:58:27
【问题描述】:
像 Java 这样的一些静态语言似乎对在 for 循环的第一个参数中定义的变量有非常特殊的规则。它们只能通过给定的循环访问,这使得它们的行为非常类似于 javascript 函数的局部变量和参数。我的意思是这样的:
class ForVariable {
public static void main(String[] args) {
for(int i = 0; i != 0; i++) {}
System.out.println(i); // Throws an Exception
}
}
Javascript 的行为并非如此,这使得嵌套循环变得非常混乱。我的问题是:在后续循环中通过 var 关键字声明变量是否有效?换句话说 - 以下哪个示例是有效的?
for(var i = 0, j; i < 5; i++) {
for(j = 0; j < 10; j++) <do some stuff>;
}
或
for(var i = 0; i < 5; i++) {
for(var j = 0; j < 10; j++) <do some stuff>;
}
显然,多次声明一个变量是错误的,这会使第二个示例无法进行,但鉴于第一个示例是我所知道的大多数语言中循环嵌套的方式,我宁愿犹豫着宣布获胜者。
【问题讨论】:
-
仅在 javascript 函数作用域中没有块作用域的概念,在循环声明中(或在
ifs 中)使用var关键字与使用var声明的效果相同函数开头的关键字。 (不像 Java、C 和其他) -
对。但这意味着嵌套循环中的那些
vars 将被执行多次,这似乎不是一个有效的解决方案,或者? -
多次使用
var没有实际问题(但有时可能是逻辑错误)。在这种情况下(循环块),变量也只能在循环块之外访问,如果您期望块范围以防您为变量使用相同的名称,您可能会遇到奇怪的问题。
标签: javascript loops for-loop nested-loops