在java,c中,如果一个变量在一个代码块中声明定义,那么跳出这个代码块是不能使用的。
如:
for(int i=0;i<10;i++){
System.out.println(i); //输出0-9
}
System.out.println(i); //此处i没有定义,会报错
但是,在Javascript中,在for中定义的var i, 跳出这个for循环还是能使用的。
for(var i=0;i<10;i++){
document.write(i); //输出0-9
}
document.write(i); //输出10
通过var声明的变量在它们所声明的函数内时钟是存在,但直到代码执行到var语句时才初始化变量。也就是说,变量是存在,但在Var语句执行之前它的值是undefined.
var name;
document.write(name); //undefined
document.write(myName); //同样是undefined,除非被赋值了,不然var声明可以放在任何地方
var myName;
let和var类似,如果在let语句之前使用这个变量(与let语句在同一个块作用域内),变量是存在的,但值是undefined.不过,与var不同的是,let在声明循环变量时,这个问题是不存在的,语法上不允许在初始化之前就使用这个变量。
o={x:1,y:2};
for(let p in o) console.log(p); //输出x和y
for each(let v in o) console.log(v); //输出1和2
console.log(p); //引用错误,P没有定义