作用域
作用域
没有问题,那你学他干嘛呢?
作用域在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权威指南》