JavaScript的“ for-in”循环中是“ var”还是没有“ var”?
|
用JavaScript编写“ 0”循环的正确方法是什么?浏览器不会对我在此处显示的两种方法提出任何投诉。首先,有一种方法可以明确声明迭代变量“ 1”:
for (var x in set) {
...
}
另外,这种方法更自然,但对我来说似乎不正确:
for (x in set) {
...
}
没有找到相关结果
已邀请:
9 个回复
姬第柔炒
,它将减小变量的范围,否则变量将查找最接近的闭包以查找searching4ѭ语句。如果找不到
,则它是全局的(如果在严格模式下,
,则全局变量将引发错误)。这可能会导致如下问题。
如果在for循环中写
,警报将显示
。 JavaScript范围界定和提升
厦惫
声明一个局部变量
。第二版:
才不是。 如果
已经是局部变量(即您在当前作用域(即当前函数)的较早位置有
或
),则它们将是等效的。如果
还不是局部变量,则使用第二个变量将隐式声明一个全局变量
。考虑以下代码:
您可能希望这会提醒
,
,
,
,
,
,但是由于
是一个并且相同,因此会提醒
,
,
,
,
,
。你不要那个!在
循环中使用
。 最重要的是:如果
循环在全局范围内(即不在函数中),则局部范围(如果使用
则声明范围
)与全局范围相同(范围
如果使用不带var的
隐式声明,则两个版本将相同。
久坡
声明局部变量。 除非您完全确定要执行此操作,否则也不要使用“ for ... in \”循环。为了遍历实数组(这很常见),您应该始终使用带有数字索引的循环:
用\“ for ... in \”遍历普通数组可能会产生意想不到的结果,因为您的循环可能会拾取除数字索引对象之外的数组属性。 编辑-在2015年,也可以使用
遍历数组:
从IE9开始,Array原型上提供了“ 42”方法。
稼悸
标题内的声明,则可以执行以下操作:
如该问题的其他答案所述,完全不使用ѭ4会产生不必要的副作用,例如分配全局属性。
细瑞
声明循环变量的变量。隐式声明的变量具有不同的范围,可能不是您想要的。
佃蒜狗掂哥
是一种常见的模式,但与
在C ++中,该变量的作用域不是
块。实际上,
被吊在封闭示波器(功能)的顶部,因此本地的
将在
循环之前(在当前示波器/功能开始之后)和之后都有效。 换句话说,请执行以下操作:
是相同的:
ES6使用
关键字(而不是
)将范围限制为for块。 当然,您应该使用局部变量(在ES6中用
或
或
声明的变量)而不是隐式全局变量。 如果您使用
(应按要求)且未声明
,则
或
将失败。
挂帘妈乡
是最干净的方法,但是两者都按以下说明工作:https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in 基本上,使用
可以确保创建一个新变量。否则,您可能会意外使用先前定义的变量。
娠频摩
蕉衫