在其他语言中,任何一对花括号都是一个作用域,JS没有,JS只有函数作用域。
JS全局变量——在script和函数外定义的变量;未用Var声明的变量;
JS局部变量——在函数内定义的变量;
作用域链:单向,内部作用域能访问到外部作用域的变量,反之不行;
Var存在的问题:
1、存在变量提升;
2、不能定义常量,即变量可被多次赋值,后赋值的会覆盖先赋值的;
3、可以重复声明变量;
4、不存在块级作用域,会带来全局污染问题;
ES6中,新增let和const以解决上面这些问题;
let特点:
1、不存在变量提升;
2、存在块级作用域,防止全局污染;
const特点:
1、只能定义一次;