为什么打印i值(它已经超出范围)?

时间:2014-03-29 14:46:41

标签: javascript jquery

在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 );

2 个答案:

答案 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

varlet之间的区别

答案 1 :(得分:1)

在这种情况下i的范围不是for循环,而是test()函数。