实际上在JavaScript内是没有块级作用域的,这一点与C 和Java之类的语言大不相同,在C 和Java中通过{ } 来标识一个块级作用域,而在js中我们想要实现该效果可以通过函数来实现。
什么是作用域
作用域是可访问变量的集合,在js中对象和函数也属于变量。作用域控制着变量的可见范围以及生命周期。由于作用域的关系又将变量分为了全局变量和局部变量。
- 全局变量是在全局作用域中定义的变量,在页面关闭时销毁
- 局部变量是在局部作用域中定义的变量,在函数执行完后销毁
- 全局作用域不能访问局部变量,局部作用域可以访问全局变量
什么是作用域链
作用域链是局部作用域访问全局变量时形成的层层递进的关系。
当局部作用域内访问某个变量时,系统会在当前作用域查找,如果没有找到就向上一级作用域查找,直到查找至全局作用域,如果全局作用域内仍没有该变量则,系统会在全局作用域内隐式声明该变量。这个链式查询关系就是作用域。
通过对作用域链的了解我们可以看出标识符定义的位置越深查找的时候就越慢,其中全局变量位于作用域链的末端,所以查找起来格外慢一些,所以我们应该尽可能少使用全局变量,多使用局部变量。