let和var
Let的块级作用域和var的局部变量
一个函数中的一个if语句中用var定义的变量和用let定义的变量
Var定义的变量是在整个函数里面有效,但是let定义的变量只是在if的块级作用域中有效
在代码块内,使用let命令声明变量之前,该变量都是不可用的,对tmp赋值会报错
Es5只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景
Let实际上为javascript新增了块级作用域
块级作用域和函数声明
Es5中规定,函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域中声明
Es6中引入了块级作用域,明确允许在块级作用域之中声明函数,但是在块级作用域之外不可引用
Const 和let都是先声明后使用,只在声明的块级作用域内有效,不可重复声明
Const本来是用来声明常量的,常量的值是不能够改变的,所以必须在声明的时候就对常量赋值
如果将一个对象用const 声明为常量,那么储存的是对象的地址,可以改变对象的地址,但是不能让这个常量指向另一个对象地址
const foo={name:’111’};
foo={};//就会报错
顶层对象的属性
顶层对象,在浏览器环境中指的就是window对象,在node指的是global对象
用var和function命令声明的全局变量,依旧是顶层对象的属性,let命令,const命令,class命令声明的全局变量,不属于顶层对象的属性
Es6声明变量的六种方法:
Es5只有两种声明变量的方法,var命令和function命令。es6除了添加let和const命令,后面章节还会提到,另外两种声明变量的方法:import命令和class命令,所以,es6一共会有六种声明变量的方法