作用域

1.1 作用域的概述

     一般来说,程序代码中所用到的名字都是有一定的作用范围的,而这个作用范围就是 作用域
     作用域的好处首先有减少了代码内名字的冲突,然后提高了程序逻辑的局部性,还增强了程序的可靠性。

JavaScript作用域:就是代码名字(变量)在一定范围内起作用和效果。

1.2 JS的两种作用域

    在es6版本之前JS有两种作用域,名字分别是全局作用域局部作用域

    全局作用域:就是html里面的整个script标签,或者是一个单独的JS文件。

    局部作用域:在函数内部的就是局部作用域,正因如此,所以局部作用域还有个名字叫函数作用域。


变量的作用域

2.1 变量作用域的分类

    在JS中,根据作用域的不同可以分为两类变量

  • 全局变量
  • 局部变量
2.2 全局变量和局部变量

    全局变量
    在全局作用域下声明的变量就叫做全局变量(在函数外部定义的变量)

  • 全局变量在代码的任何位置都可以使用。
  • 不建议在函数内使用全局变量也就是var声明的变量。
  • 如果函数内部有一个没有声明直接赋值的变量也是属于全局变量。

    局部变量
    在局部作用域下声明的变量叫做局部变量(在函数内声明的变量)

  • 局部变量只能在当前函数内部使用。
  • 在函数内部用var声明的变量也是局部变量。
  • 函数的形参也是局部变量。
2.3 全局变量和局部变量的区别

    全局变量:在任意一个地方都可以使用,但是只有在浏览器关闭时才会被销毁,所以比较占内存。
    局部变量:只能在函数内部使用。当该函数被执行时,会被初始化。当代码块运行结束后就会被销毁,因此更节省内存空间。

JS中没有块级作用域
JS也是在 es6 版本的时候新增了块级作用域。


作用域链

    作用域链:当内部函数访问外部函数的变量时,采取的就是链式查找的方式来决定取哪个值。这种结构称之为作用域链

  • 只要是代码就至少有一个作用域。
  • 写在函数内部的就是局部作用域。
  • 如果函数内部还有函数,那么在这个作用域中就又创建了一个作用域。