作用域和作用域链

作用域

变量或函数可以发生作用的区域即是作用域。作用域的最大用途就是隔离变量或函数,并控制变量或函数的生命周期,超过该区域的变量或函数就不能被访问。

全局作用域

在整个程序生命周期内都是有效的,在任意的函数内部都能访问的变量或函数拥有全局作用域。

函数作用域

在某个函数内部声明的变量或函数拥有函数作用域。它们只能被该函数的语句使用,函数外部是不可访问的。函数在创建的时候,变量和函数的函数作用域已经确定下来。函数的参数也属于函数内部的变量,因此拥有函数作用域。

作用域链

当一个块或函数嵌套在另一个块或函数中时,就发生了作用域的嵌套。因此,在当前作用域中无法搜索到某个变量时,引擎就会在外层嵌套的作用域中继续搜索,直到搜索到该变量,或抵达最外层的作用域(也就是全局作用域)为止。这样一条有序的列表,称为作用域链,作用域链的最前端一定是当前作用域。

作用域链可以理解为下面这种数据格式:

{
    Scope: [
        { //当前作用域
            变量,
            函数名
        }, 
        { //下个作用域
            变量,
            函数名
        }, 
        { //下下个作用域
            变量,
            函数名
        },
        ... 
        { //全局作用域
            变量,
            函数名
        },
    ]
}

参考链接:https://www.imooc.com/article/251110

你可能感兴趣的:(作用域和作用域链)