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

在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没有定义


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值