JavaScript的“ for-in”循环中是“ var”还是没有“ var”?

for-in用JavaScript 编写循环的正确方法是什么?浏览器不会对我在此处显示的两种方法提出任何投诉。首先,有一种方法x可以明确声明迭代变量:


for (var x in set) {

    ...

}

另外,这种方法更自然,但对我而言似乎不正确:


for (x in set) {

    ...

}


浮云间
浏览 410回答 3
3回答

心有法竹

使用var,它会减小变量的范围,否则变量将查找最接近的闭包以查找var语句。如果找不到,var则表示它是全局的(如果处于严格模式下using strict,则全局变量将引发错误)。这可能会导致如下问题。function f (){&nbsp; &nbsp; for (i=0; i<5; i++);}var i = 2;f ();alert (i); //i == 5. i should be 2如果您var i在for循环中编写警报,则会显示2。

慕姐4208626

第一个版本:for (var x in set) {&nbsp; &nbsp; ...}声明一个名为的局部变量x。第二版:for (x in set) {&nbsp; &nbsp; ...}才不是。如果x已经是局部变量(即您在当前作用域(即当前函数)中早于var x;或var x = ...;某处),则它们将是等效的。如果x还不是局部变量,则使用第二个变量将隐式声明一个全局变量x。考虑以下代码:var obj1 = {hey: 10, there: 15};var obj2 = {heli: 99, copter: 10};function loop1() {&nbsp; &nbsp; for (x in obj1) alert(x);}function loop2() {&nbsp; &nbsp; for (x in obj2) {&nbsp; &nbsp; &nbsp; &nbsp; loop1();&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; alert(x);&nbsp; &nbsp; }}loop2();你可能会想到这警报hey,there,heli,hey,there,copter,但因为x是一个,它会提醒一样hey,there,there,hey,there,there。你不要那个!var x在for循环中使用。最重要的for是:如果循环在全局范围内(即不在函数中),则局部范围(x如果使用,则在其中声明该范围var x)与全局范围相同(该范围x在隐式声明如果您x不使用var),那么这两个版本将完全相同。

杨魅力

你真的应该声明局部变量用var,始终。您也不应使用“ for ... in”循环,除非您完全确定这就是您想要的。为了遍历实数组(这很常见),您应该始终使用带有数字索引的循环:for (var i = 0; i < array.length; ++i) {&nbsp; var element = array[i];&nbsp; // ...}用“ for ... in”遍历普通数组可能会产生意想不到的结果,因为循环可能会拾取除数字索引数组之外的数组属性。编辑 -在2015年这里可以使用.forEach()遍历数组的方法:array.forEach(function(arrayElement, index, array) {&nbsp; // first parameter is an element of the array&nbsp; // second parameter is the index of the element in the array&nbsp; // third parameter is the array itself&nbsp; ...});.forEach()从IE9开始,该方法存在于Array原型中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript