在JavaScript中,当我们在范围之外打印时,为什么会打印i
值
test();
function test(){
for(var i=0;i<10 ;i++){
console.log(i)
}
console.log('outside'+i)
}
与Java相比,它给出了编译错误?
for(int x = 10; x < 20; x = x+1) {
System.out.println("value of x : " + x );
}
System.out.print("value o " + x );
答案 0 :(得分:3)
JavaScript的功能范围不是阻塞范围(C,C#,C ++,Java和许多其他编程语言都有块范围)。在JavaScript中,函数内任何位置定义的变量将在函数的任何位置可见:
function test() {
console.log(x); // logs undefined, because x is a variable that has no value yet
if (true) {
x = 42;
} else {
var x = 5; // x is not set to 5, but it is acknowledged as a variable
}
console.log(x); // logs 42 because the value in variable x has been set to 42
console.log(y); // Error because y is not declared
}
您可能会看到有关此问题的一件事是var
悬挂。这意味着JS解释器将表现为范围(函数或全局)中的所有var
语句在该范围的开头移动:
function foo() {
console.log(x,y);
var x = 4;
var y = 2;
var x = 0;
}
// is equivalent to:
function foo() {
var x,y;
console.log(x,y);
x = 4;
y = 2;
x = 0;
}
有关MDN
的更多详情另请注意ECMAScript6
中var
和let
之间的区别
答案 1 :(得分:1)
在这种情况下i
的范围不是for
循环,而是test()
函数。