2011-07-25 114 views
2

在下面的示例中,是通过for..in循环为每次迭代创建的新变量'y'吗?或者是变量声明被提升到函数的顶部,并在每次迭代时重新使用?JavaScript函数级范围

function example() { 
    var x; 
    for(x in obj) { 
     var y = obj[x]; 
    } 
} 

感谢

回答

3

它的悬挂,因为for循环对范围没有任何影响。

+0

我想,只是想确定一下。谢谢。 – Steve

0

y是被替换的相同变量。做一个新的,你会用

function example() { 
    var x; 
    var y= new Array; 
    for(x in obj) { 
     y[x] = obj[x]; 
    } 
} 
+0

恐怕这不对。如果你将循环分成两个语句:'var y'和'y [x] = obj [x]',然后在这两个语句之间读取'y'的值,你会发现'y'仍然包含阵列。也就是说,它不是一个新的未定义的变量。 – gilly3

+0

y应该仍然包含obj数组项目,但是现在y可以从obj数组中索引每个项目。我相信他问,如果y只持有obj数组中的最后一项。这是正确的,通过使用y [x] y将包含与obj相同的数组。 –

+0

那为什么要用'var'关键字? – gilly3

0

您可以test this for yourself

var obj = { 
    name: "Dan", 
    surname: "Tao" 
}; 

var x; 
for (x in obj) { 
    var y = obj[x]; 
} 
alert(y); 

一个警告框将与文本Tao出现,表明yfor循环的范围之外访问。