ECMAScript是一个国际通过的标准化脚本语言。JavaScript由ECMAScript和DOM、BOM三者组成。可以简单理解为:ECMAScript是JavaScript的语言规范,JavaScript是ECMAScript的实现和扩展。
ES5中有全局作用域,函数作用域的概念,ES6中新增块级作用域的概念。
Var
使用var定义变量时,这个变量属于当前的函数作用域,如果在函数中声明,属于是函数的局部变量,如果在函数上部定义var,属于是全局变量。
在声明变量的时候如果忘记var,如直接写 a = 10,则该变量被定义为全局变量。如果在已定义的变量之后,则该变量被覆盖。
3.var 声明的变量存在提升,提升是指无论 var 出现在一个作用域的哪个位置,这个声明都属于当前的整个作用域,在其中到处都可以访问到。注意只有变量声明才会提升,对变量赋值并不会提升
4.没有块级作用域的概念,不能跨块访问,也不能跨函数访问。
Let
1.Let声明的变量具有块作用域的特征,不能跨块访问,也不能跨函数访问。
2.在同一个块级作用域,不能重复声明相同变量。
3.Let声明的变量不存在变量提升,Let声明存在暂时性死区
Const
1.基本与Let相同,但是const定义的变量不能修改,const声明创建一个值的只读引用,但并不意味着它所持有的值不可改变,只是标量标识符不能重新分配。const定义的引用类型只要指针不发生改变,其他的不论如何改变都是允许的。(关于const中可以改变和不可改变的事情)
2.使用时必须初始化(必须赋值)