为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

浮云间 2019-12-26 08:59:45
for-in用JavaScript 编写循环的正确方法是什么?浏览器不会对我在此处显示的两种方法提出任何投诉。首先,有一种方法x可以明确声明迭代变量:for (var x in set) {    ...}另外,这种方法更自然,但对我而言似乎不正确:for (x in set) {    ...}
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

使用var,它会减小变量的范围,否则变量将查找最接近的闭包以查找var语句。如果找不到,var则表示它是全局的(如果处于严格模式下using strict,则全局变量将引发错误)。这可能会导致如下问题。


function f (){

    for (i=0; i<5; i++);

}

var i = 2;

f ();

alert (i); //i == 5. i should be 2

如果您var i在for循环中编写警报,则会显示2。


查看完整回答
反对 回复 2019-12-26
?
慕姐4208626

TA贡献1852条经验 获得超7个赞

第一个版本:


for (var x in set) {

    ...

}

声明一个名为的局部变量x。第二版:


for (x in set) {

    ...

}

才不是。


如果x已经是局部变量(即您在当前作用域(即当前函数)中早于var x;或var x = ...;某处),则它们将是等效的。如果x还不是局部变量,则使用第二个变量将隐式声明一个全局变量x。考虑以下代码:


var obj1 = {hey: 10, there: 15};

var obj2 = {heli: 99, copter: 10};

function loop1() {

    for (x in obj1) alert(x);

}

function loop2() {

    for (x in obj2) {

        loop1(); 

        alert(x);

    }

}

loop2();

你可能会想到这警报hey,there,heli,hey,there,copter,但因为x是一个,它会提醒一样hey,there,there,hey,there,there。你不要那个!var x在for循环中使用。


最重要的for是:如果循环在全局范围内(即不在函数中),则局部范围(x如果使用,则在其中声明该范围var x)与全局范围相同(该范围x在隐式声明如果您x不使用var),那么这两个版本将完全相同。


查看完整回答
反对 回复 2019-12-26
?
杨魅力

TA贡献1811条经验 获得超5个赞

你真的应该声明局部变量用var,始终。


您也不应使用“ for ... in”循环,除非您完全确定这就是您想要的。为了遍历实数组(这很常见),您应该始终使用带有数字索引的循环:


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

  var element = array[i];

  // ...

}

用“ for ... in”遍历普通数组可能会产生意想不到的结果,因为循环可能会拾取除数字索引数组之外的数组属性。


编辑 -在2015年这里可以使用.forEach()遍历数组的方法:


array.forEach(function(arrayElement, index, array) {

  // first parameter is an element of the array

  // second parameter is the index of the element in the array

  // third parameter is the array itself

  ...

});

.forEach()从IE9开始,该方法存在于Array原型中。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 409 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信