作用域

55 阅读1分钟

作用域

作用域

没有问题,那你学他干嘛呢?

作用域在JavaScript中是什么意思呢?

在我们日常写代码中,很定会写出类似格式的代码

var num = 10;

function fn(a){
    var sum = a+num;
    console.info(sum);
}
fn(20);//30

在函数fn中并没有定义num的值,但是它却可以访问到num的值,因为fn属于全局的作用域。因此函数fn可以获取到num的值。总结一下,就是说:作用域用来确定当前执行代码对于变量的访问权限

作用域的分类

作用域分为词法作用域动态作用域:

  • 词法作用域:又叫做静态作用域,当函数定义的时候就已经确定了作用域关系,也就是变量的值;
  • 动态作用域:意思和静态作用域相反,函数的作用域是在函数执行的时候才确定的;

JavaScript中的作用域是词法作用域,为什么呢?

因为JavaScript是解释型语言,代码不需要编译可以直接运行。

ok,意思解释清楚了。看两个题吧~

var num = 10;

function fn(){
    var num = 20
    return function fn1(){
        return num
    }
}
fn()();//20

JavaScript函数的执行用到了作用域链,这个作用域链是在函数定义的时候创建的。嵌套函数fn1定义在这个作用域里,其中的变量num一定是局部变量,不管何时何地执行函数fn1,这种绑定依然有效

《JavaScript权威指南》