我见过使用两种不同方法定义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-in
和for (i=0)
答案 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循环之前声明变量。 像:
var i;
for (i = 0; i < x; i++) {
doSomething();
}
==OR==
for(var i = 0; i < x; i++){
doSomething();
}
&#13;