let和var的区别

转载来的 地址是:http://www.cnblogs.com/ricoliu/p/6149912.html

通过var定义的变量,作用于是整个封闭函数,是全域的
通过过let定义的变量,作用域是在块级或是子块中

变量提升现象: 
 浏览器在运行代码之前会进行预解析,首先解析函数申明,定义变量,解析完之后再对函数、变量进行运行、赋值
 var声明的变量会被提升到作用域的顶部并初始化为undefined
 而let声明的变量在作用域的顶部未被初始化

只要款及作用域内存在let命令,它所声明的变量就“绑定” 这个区域,不再受外部的影响

暂时性死区(temporal dead zone,简称TDZ):
在代码块内,使用let命令声明变量之前,该变量都是不可用的;
“暂时性死区”也意味着typeof不再是一个百分之百安全的操作

举例1:变量x使用let命令声明,所以在声明之前,都属于x的“死区”,只要用到该变量就会报错。因此,typeof运行时就会抛出一个ReferenceError
typeof x; // ReferenceError
let x;

举例2:如果一个变量根本没有被声明,使用typeof反而不会报错。
typeof undeclared_variable // "undefined"


ES6规定暂时性死区和let、const语句不出现变量提升,主要是为了减少运行时错误,防止在变量声明前就使用这个变量,从而导致意料之外的行为。

 

 

我建了个java群,随时交流 657445315

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值