作用域
1. 全局作用域
- 浏览器窗口
- 在所有函数之外定义的变量
2. 函数作用域
- 在函数中声明的变量(包括函数参数)
3. 块级作用域
- “{ }”界定的代码区域,一对{ }即为一个块级作用域。
- ES6允许块级作用域任意嵌套。
- 内层作用域的变量名,可与外层作用域的变量同名。
ES5中的IIFE(立即执行匿名函数)不再必要了。
- a) ES5没有块内作用域,只能用函数,但函数只能调用而不能立即执行,故此有了立即执行匿名函数,得以让此函数可以不需调用就能执行。
- b) 立即执行函数:( function(x){ } )( x );
- c) 可以理解为IIFE = 块级作用域“{}"
ES5只有全局作用域和函数作用域
作用域链
1. 每一段JS代码都有一个与之相关的作用域链
2. JS查找变量时,会从当前作用域开始向作用域链上找,直到找到变量的声明为止,若未找到,则报错。
//作用域链