Javascript JS循环变量范围

Javascript JS循环变量范围,javascript,for-loop,global-variables,scope,design-patterns,Javascript,For Loop,Global Variables,Scope,Design Patterns,我在尝试一些简单的JS代码。我知道我们应该使用var关键字在循环中声明循环变量,比如forloop,以避免全局变量声明。然而,我意识到循环变量在循环执行之后也存在: var a = [1, 2, 3, 4, 5, 6]; for (var i = 0; i < a.length; i++) document.write(a[i]); //123456 document.write(i); //6 但这是生产中的标准方式吗?还有什么可以做的呢?JavaScript只有函数作用域任

我在尝试一些简单的JS代码。我知道我们应该使用
var
关键字在循环中声明循环变量,比如
for
loop,以避免全局变量声明。然而,我意识到循环变量在循环执行之后也存在:

var a = [1, 2, 3, 4, 5, 6];
for (var i = 0; i < a.length; i++)
    document.write(a[i]); //123456
document.write(i);  //6

但这是生产中的标准方式吗?还有什么可以做的呢?

JavaScript只有
函数作用域
任何使用
var
在side函数中定义的变量只能在函数内部使用。 for循环不会为变量创建任何作用域

我们可以通过创建显式函数范围来实现这种行为。但这是生产中的标准方式吗

对。函数是在JavaScript中引入新作用域的唯一可能性(尽管在将来的版本中可能会随着而改变);在生产中也大量使用

还有什么事情可以做


要将
i
的范围限制到for循环的块?没有(更不用说<代码>让)。然而,您几乎不需要这样做,因为没有任何东西会干扰它-
var i
仍然是您函数的局部范围。有时,您甚至可能想在循环之后使用
i
作为持续计数器。

Javascript有点奇怪,而且有很多缺陷,这使得它对于中型/大型项目来说是一种糟糕的语言

“var”表示变量仅在当前功能范围内可用: 所有变量都是在函数开始运行并设置为“未定义”之前定义的。 因此:

内部指:

var i=undefined;
alert(i);
i=4;
alert(i);
i=5;
alert(i);

在结构化编程中,所有代码都应该在函数中,这意味着“var”关键字将按预期工作。但是如果你在全局范围内编写代码,“var”就没有实际意义。

for循环(及其作用域行为)与OOP有什么关系?@Bergi umm我认为当我们为(int I=0;iJavaScript(和许多其他语言)编写
时没有块作用域。这与一种语言是否遵循OOP原则无关。你也可以使用
map
forEach
是的,我知道,但许多模式和实践都在发展,以利用JS中的OOP,甚至可以说使JS表现得像OO语言。只想知道是否有任何标准/良好-f下面的解决方法/模式用于将循环变量限定为循环块。但这是否意味着
的每一个
都需要嵌套在函数范围内?不。只有当需要在循环上明确限定
i
的范围时,才需要这样做。修辞?可能是的,我尝试将其整齐地框定,但不仅仅是为了引起巨大的响应和高质量的响应否则,每个好问题都会是一个修辞。我通常会在网上找到与我读过的旧主题相关的重要内容,而这些内容都是在初次阅读之后很久。所以,我只想检查一下我是否遗漏了什么。像JS这样的语言非常有可能,它非常灵活,并且有专门针对遵循模式的单独书籍。答案是这个问题可能是否定的,没有其他已知的方法或模式来解决这个问题,但这仍然会增加我的理解价值。也许我不明白你到底在要求什么。你已经知道闭包了吗(下一件与函数范围相关的事)?如果不知道,
alert(i);
var i=4;
alert(i);
var i=5;
alert(i);
var i=undefined;
alert(i);
i=4;
alert(i);
i=5;
alert(i);