Java与JavaScript变量范围

时间:2012-09-28 18:00:09

标签: java javascript scope

在以下Java代码段中,i的范围仅限于for循环的内部。这就是它导致错误的原因。但是,在类似的JS片段中,i显然可以在循环之外访问。怎么可能?

爪哇:

for(int i=0;i<10;i++) {
    ...
}
System.out.println(i);

输出:“我没有定义”

JS:

for(var i=0;i<10;i++) { 
    ...
}
console.log(i);

输出:10

我没想到看到JS的输出。我想知道JS与Java的不同之处。 JavaScript变量范围如何工作?

2 个答案:

答案 0 :(得分:13)

在Javascript&#34; local&#34;变量具有功能范围,而不是块范围

所有本地变量声明都是&#34;悬挂&#34;到当前范围的顶部,因此您的代码等同于:

var i;
for (i = 0; i < 10; ++i) {
}
console.log(i);

请注意,虽然声明已悬挂,但任何分配都不会。例如这段代码

function test() {
    console.log(i);  // undefined
    var i = 1;       // declaration and assignment
    console.log(i);  // 1
}

相当于:

function test() {
    var i;           // declaration hoisted
    console.log(i);  // undefined
    i = 1;           // assignment still happens here
    console.log(i);  // 1
}

答案 1 :(得分:4)

Javascript只有两种类型的范围 - 全局和功能。 Javascript在函数级别为lexically scoped