作用域链

26 阅读1分钟

作用域

全局作用域: 在程序任何位置都和一访问 函数内部作用域:在一个函数内部下声明变量,变量只能在函数内部访问,函数外不可以访问 块级作用域:es6中let/const在大括号中定义,大括号外部不可以访问

词法作用域/静态作用域

写好代码时它的作用域就确定了,JavaScript 遵循的就是词法作用域

定义

当在JavaScript 中使用一个变量的时候,首先JavaScript 会尝试在当前作用域下寻找该变量,如果没有找到,再向上层作用域中寻找,以此类推直到找到该变量或者是已经到了全局作用域

如果在全局作用域中仍然找不到该变量 1.全局范围得隐式生命该变量 或者直接报错

var sex = '男';
function person() {
    var name = '张三';
    function student() {
        var age = 18;
        console.log(name); // 张三
        console.log(sex); // 男 
    }
    student();
    console.log(age); // Uncaught ReferenceError: age is not defined
}
person();

上述代码主要主要做了以下工作:

  • student函数内部属于最内层作用域,找不到name,向上一层作用域person函数内部找,找到了输出“张三”
  • student内部输出sex时找不到,向上一层作用域person函数找,还找不到继续向上一层找,即全局作用域,找到了输出“男”
  • person函数内部输出age时找不到,向上一层作用域找,即全局作用域,还是找不到则报错