一 JS的作用域
在ES5中,没有块级作用域,JS的作用域分为函数作用域和全局作用域两种。
在上面的代码中,变量color存在于if语句中,但是在if语句的外面能正确打印出color的值,所以color变量存在于全局作用域中。
在这个例子中,同时打印color1和color2变量,因为color1存在于全局变量中,所以color1的值能正确打印,而color2变量是在函数getColor中,所以在函数外面打印时报错,这是因为color2的作用域是getColor函数作用域。
在ES6中,新增了let和const,这两个类型的变量只存在于块级作用域中,并且不存在变量提升。
在if语句中将 var 换成 let ,在if语句外面打印变量color则报错,因为用let和const声明的变量作用域是块级作用域if。
二 JS中的作用域链</