JS作用域

120 阅读2分钟

1、什么是作用域

    通俗来讲,作用域就是限制一个变量在程序中的使用范围

2、作用域包括(局部/全局/块级)

全局作用域

    在script 标签内声明的 变量 就是全局作用域下的
    在全局作用域声明的变量或者函数 称为 全局变量 或者 全局函数

局部作用域

    在函数内部声明的变量,就是存在于局部作用域的
    局部作用域声明的变量,只能在当前局部作用域内去使用

块级作用域

    ES6引入了letconst 关键字,和var 关键字不同,使用let/const在{}声明的变量,
    只能在{}内使用,这个区域称为块级作用域

3、作用域链

什么是作用域链

    每一个作用域上一层会有一个全新的作用域,每一个作用域之间的一个连接,我们称之为作用域链
    如果我们在一个作用域链内寻找一个变量,那么我们会在当前作用域内查找,如果找到就使用,
    没有找到,就一级一级的向上寻找
    所以我们将这个层层查找的顺序之间的连接,称为作用域链

查找规则

    在一个作用域内查找一个变量,如果有直接使用,如果没有就去上一层继续查找,找到就直接使用,没有再去上一级,直到找到了全局作用域,找到直接使用,没有找到报错

赋值规则

        在一个作用域对一个变量进行赋值,那么会先在当前作用域内查找变量,找到直接赋值,如果没
     有,会去上一层作用域查找
        如果找到直接修改,没有继续向上,如果找到了全局作用域还是没有,那么会在全局作用域创建一个变量,然后对它进行赋值操作