es6 转换成es5的工具叫做babel
- var
- 在ES5中,作用域一般分为全局作用域和局部作用域,在ES6中新增块级作用域,如条件语句,循环语句都是块级作用域,也可以理解为定义在{}内就是一个块级作用域,var中不存在块级作用域
- var声明的变量存在变量提升,在搜索引擎在加载js的时候会先扫描一遍代码,将所有的var声明集合在一起,组成一个词法环境
- let
- let只在块级作用域内生效
- 不能重复声明
- 不存在变量提升
- 不会成为window的属性,在全局作用域中用let声明的变量 ,使用window变量名不会生效
- 常用于解决var在声明技术的循环变量造成的变量泄露问题
- const
- 用于声明一个常量,特性与let一样,只能在块级作用域中生效,不能重复声明,不存在变量提升,不会成为window的属性,但是一旦声明就不能在修改值
- 如果声明基本数据类型,声明后是不能修改的,但是如果声明引用数据类型,则可以修改属性值
- let/const 和var的区别
- 会进行预解析,let/const不会进行预解析,必须先定义后使用
- 可以重复声明变量名,let/const不可以
- var没有块级作用域,let/const 有块级作用域
- var 只有函数私有作用域才能限制使用范围
- let/const 只要是能书写代码的{}都能限制使用范围
- let 和const的区别
- let叫做变量,const叫做常量
- let 可以在声明的时候不进行赋值,const在声明的时候必须赋值
- let 声明的变量可以修改,const声明的常量不能被修改,一旦被修改就报错