作用域
1.1 作用域的概述
一般来说,程序代码中所用到的名字都是有一定的作用范围的,而这个作用范围就是 作用域。
作用域的好处首先有减少了代码内名字的冲突,然后提高了程序逻辑的局部性,还增强了程序的可靠性。
JavaScript作用域:就是代码名字(变量)在一定范围内起作用和效果。
1.2 JS的两种作用域
在es6版本之前JS有两种作用域,名字分别是全局作用域和局部作用域。
全局作用域:就是html里面的整个script标签,或者是一个单独的JS文件。
局部作用域:在函数内部的就是局部作用域,正因如此,所以局部作用域还有个名字叫函数作用域。
变量的作用域
2.1 变量作用域的分类
在JS中,根据作用域的不同可以分为两类变量
- 全局变量
- 局部变量
2.2 全局变量和局部变量
全局变量
在全局作用域下声明的变量就叫做全局变量(在函数外部定义的变量)
- 全局变量在代码的任何位置都可以使用。
- 不建议在函数内使用全局变量也就是var声明的变量。
- 如果函数内部有一个没有声明直接赋值的变量也是属于全局变量。
局部变量
在局部作用域下声明的变量叫做局部变量(在函数内声明的变量)
- 局部变量只能在当前函数内部使用。
- 在函数内部用var声明的变量也是局部变量。
- 函数的形参也是局部变量。
2.3 全局变量和局部变量的区别
全局变量:在任意一个地方都可以使用,但是只有在浏览器关闭时才会被销毁,所以比较占内存。
局部变量:只能在函数内部使用。当该函数被执行时,会被初始化。当代码块运行结束后就会被销毁,因此更节省内存空间。
JS中没有块级作用域
JS也是在 es6 版本的时候新增了块级作用域。
作用域链
作用域链:当内部函数访问外部函数的变量时,采取的就是链式查找的方式来决定取哪个值。这种结构称之为作用域链。
- 只要是代码就至少有一个作用域。
- 写在函数内部的就是局部作用域。
- 如果函数内部还有函数,那么在这个作用域中就又创建了一个作用域。