在for循环中声明i时使用var

时间:2015-03-29 00:38:14

标签: javascript for-loop

我见过使用两种不同方法定义for循环的Javascript代码。

for (var i=0;i < x.length; i++)

但它也是

for (i=0; i < x.length; i++)

for-in循环

发生了同样的事情
for (var i in x)

for (i in x)

i声明为var而只是说i之间有什么区别吗?做一个优于另一个有优势吗?这是一种正确的方法吗?据我所知,它们都是相同的,但必须有一些区别。

注意:我没有询问for-infor (i=0)

之间的区别

4 个答案:

答案 0 :(得分:3)

在函数的某处没有var声明,对i的引用将是全局对象的i属性。如果for循环体中的代码调用代码(例如,在被调用的方法中)也会修改全局i,则会出现各种不可预测的行为。

请注意,在var i循环初始化

中声明for
for (var i = ...)

相当于在var i;循环之前声明for

var i;
for (i = ...)

特别是,i的声明将hoisted放在封闭范围的顶部。

编辑:如果您启用strict mode,那么必须声明您的循环变量(实际上是所有变量)。引用未使用var语句声明的变量将导致抛出ReferenceError(而不是导致全局变量存在)。

答案 1 :(得分:1)

JavaScript是功能范围的。至少目前,该语言没有块级变量。

当你写for (var i=0; ... );时,它与

相同
var i;
for (i=0; ... );

如果没有"use strict";变量,声明将为hoisted

for (i=0; ... );单独暗示i属于全球(最顶层)对象(在浏览器中window

答案 2 :(得分:1)

<强>说明:

  

for语句创建一个由三个可选项组成的循环   表达式

Source: Mozilla JavaScript Docs

<强>背景

您指的是初始化,它是一个表达式或变量声明。它几乎总是用来初始化一个计数器变量,它允许我们在你展示的时候迭代一个集合。

  

此表达式可以选择使用var声明新变量   关键词。这些变量不是循环的局部变量,即它们在   与for循环相同的范围。此表达式的结果是   丢弃。

在JavaScript中,变量可以包含不同的数据类型,对于计数器变量,JavaScript会将变量视为数字。

<强>答案:

可以选择声明一个新变量(或根本没有突出显示)的原因是由于JavaScript编程语言的性质。您已经找到了处理变量和范围的语言的一个重要方面。

&#34;改变或不改变&#34;

请参阅另一篇关于使用var或者根本不使用它的帖子来了解更多......

What is the function of the var keyword and when to use it (or omit it)?

答案 3 :(得分:0)

如果你说开始使用&#34;我&#34;不说&#34; var&#34;首先,你应该在for循环之前声明变量。 像:

&#13;
&#13;
var i;
for (i = 0; i < x; i++) {
  doSomething();
}

==OR==
  
for(var i = 0; i < x; i++){
  doSomething();  
}
&#13;
&#13;
&#13;