新声明方式:let
1、不属于顶层对象 window
2、不允许重复声明
3、不存在变量提升
4、暂时性死区
5、块级作用域
 
原来var声明:
var a = 5;
console.log(a); // 5
console.log(window.a); // 5
delete a
console.log(a); // 5 b = 6;
console.log(b); // 6
console.log(window.b); // 6
delete b;
console.log(b); // Uncaught ReferenceError: b is not defined
 
delete只能删除对象中的属性,
因为b没有用var声明,所以b是挂载到window顶级对象下面的b属性,所以b能被delete关键字删除,
而a是通过var声明的变量,不能被delete删除。
但是a是全局变量,这是js初期设计缺陷,因为全局变量会跟顶层对象的属性进行挂钩,
所以window.a可以正常输出,但是a不是window对象的属性,所以不能进行delete。
 
1、let定义不属于顶层对象 window
let a = 5;
console.log(a); //5
console.log(window.a); // undefined

  

2、不允许重复声明

let a = 6; // Identifier 'a' has already been declared

  

3、不存在变量提升

console.log(b); // undefined
var b = 6;
console.log(c); // Uncaught ReferenceError: c is not defined
let c = 7;

  

4、暂时性死区

暂时性死区的意思是:let定义的作用域内,不能在声明之前使用
var d = 5;
if (true) {
d = 6;
let d;
}
function foo(a = b, b = 2) {
console.log(a, b);
}
foo();

  

5、块级作用域

// for (var i = 0; i < 3; i++) {
// console.log("循环内:" + i);
// }
for (let i = 0; i < 3; i++) {
console.log("循环内:" + i);
}
console.log("循环外:" + i); // 使用let,外面会取不到i,报错:Uncaught ReferenceError: i is not defined

 

补充说明: 

块级作用域必须要{}进行包裹
if(true) let a = 5; //这样会报错
 

最新文章

  1. python smtplib email
  2. ubuntu安装
  3. GROUP BY和ORDER BY共用
  4. dom div移动解决停顿问题
  5. AIM Tech Round 3
  6. typeahead使用配置参数。
  7. AD 删除一个区域里的所有布线,不删除元器件,丝印等
  8. Python 相机镜头
  9. 统计学习方法(三)——K近邻法
  10. java web (j2ee)学习路线 —— 将青春交给命运
  11. (十九)TableView的点击监听和数据刷新(Alert的多种样式) -tag传值的技巧
  12. String 常见的十种方法!
  13. oracle 定时 job
  14. 基于ubuntu的docker安装
  15. 【下一代核心技术DevOps】:(三)私有代码库阿里云Git使用
  16. Java知多少(43)异常处理基础
  17. 【PAT】1052 Linked List Sorting (25)(25 分)
  18. php初学记
  19. Python在Windows下操作CH341DLL
  20. gradle第一篇:初入门

热门文章

  1. LeetCode-057-插入区间
  2. out与err输出流
  3. python安装各种插件
  4. Lua在Nginx的应用
  5. 浅识 npm 与 cnpm
  6. 1. 查看NGINX是否在运行.
  7. Java Object 类常用方法总结
  8. Tomcat乱码问题解决
  9. Java基础 - 异常详解
  10. JVM知识(一) 求你了,别再说Java对象都是在堆内存上分配空间的了!