您的位置:首页 > Web前端 > JavaScript

Javascript没有块级作用域(let 和var)

2014-07-03 11:30 411 查看
在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没有定义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息