kan*_*rbk 0 javascript java scope
在以下Java代码段中,范围i仅限于for循环内部.这就是它导致错误的原因.但是,在类似的JS片段中,i显然可以在循环外部访问.怎么可能?
Java的:
for(int i=0;i<10;i++) {
...
}
System.out.println(i);
Run Code Online (Sandbox Code Playgroud)
输出:"我没有定义"
JS:
for(var i=0;i<10;i++) {
...
}
console.log(i);
Run Code Online (Sandbox Code Playgroud)
产量:10
我没想到会看到JS的输出.我想知道JS与Java的不同之处.JavaScript变量范围如何工作?
Aln*_*tak 13
在Javascript中"本地"变量具有函数范围,而不是块范围.
所有局部变量声明都"挂起"到当前作用域的顶部,因此您的代码等效于:
var i;
for (i = 0; i < 10; ++i) {
}
console.log(i);
Run Code Online (Sandbox Code Playgroud)
请注意,虽然声明已悬挂,但任何作业都不会.例如这段代码
function test() {
console.log(i); // undefined
var i = 1; // declaration and assignment
console.log(i); // 1
}
Run Code Online (Sandbox Code Playgroud)
相当于:
function test() {
var i; // declaration hoisted
console.log(i); // undefined
i = 1; // assignment still happens here
console.log(i); // 1
}
Run Code Online (Sandbox Code Playgroud)