JavaScript函数级作用域

JavaScript函数级作用域,javascript,Javascript,在下面的示例中,是否通过for..In循环为每个迭代创建了一个新变量“y”?还是将变量声明提升到函数顶部,并在每次迭代中重复使用 function example() { var x; for(x in obj) { var y = obj[x]; } } 谢谢,因为for循环对作用域没有影响,所以它被提升。y是被替换的同一个变量。做一个你会用的新的 function example() { var x; var y= new Array

在下面的示例中,是否通过for..In循环为每个迭代创建了一个新变量“y”?还是将变量声明提升到函数顶部,并在每次迭代中重复使用

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

谢谢,因为for循环对作用域没有影响,所以它被提升。

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

function example() {
    var x;
    var y= new Array;
    for(x in obj) {
       y[x] = obj[x];
    } 
}
你可以:


一个带有文本
Tao
的警报框将出现,表明
y
可在
for
循环的范围之外访问。

我想,只是想确定一下。谢谢。恐怕这样不对。如果将循环分成两条语句:
var y
y[x]=obj[x]
,然后读取这两条语句之间的
y
值,您会发现
y
仍然包含数组。也就是说,它不是一个新的未定义变量。y应该仍然包含obj数组项,但现在y可以索引obj数组中的每个项。我相信他在问y是否只保存obj数组中的最后一项。这是正确的,通过使用y[x]y将包含与obj相同的数组。那么为什么要使用
var
关键字呢?我的错误。当我复制他的代码var y[x]=obj[x]时,我没有意识到y已经被定义了;
var obj = {
  name: "Dan",
  surname: "Tao"
};

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