JS作用域链

1. 作用域

JS中的变量和函数并不总是可用的,有其使用的范围,这就是作用域。

  • JS的作用域靠函数形成,函数内声明的变量是局部变量,在函数外不可访问。
  • 不在函数内声明的变量是全局变量。且函数内省略var声明的变量也是全局变量。

2. 作用域链

作用域链决定了哪些数据能被函数访问

举个例子
var a = 1;      //全局变量
function fn1(){    //父函数
   function fn2(){   //子函数
     console.log(a);
   }
   function fn3(){    //子函数
     var a = 4;     //局部变量
     fn2();
   }
   var a = 2;       //父函数的局部变量对子函数可见
   return fn3;
}
var fn = fn1();        //调用函数fn1
fn();    //2

函数在执行过程中,先从自己内部找变量,如果找不到,再从创建当前函数所在的作用域中查找,即层层向上往父级作用域中查找变量。沿着作用域链找变量。

函数fn1返回函数fn3的值,fn3调用了fn2,fn2要求输出变量a的值,函数fn2内部并没有定义变量a,fn2的父函数是fn1,所以往父函数fn1的作用域中查找,由代码可见,fn1中有var a =2; 所以找到fn2输出变量a的值为2。这就是最终的结果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 作用域链: JS权威指南指出”JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里....
    YYPL阅读 2,499评论 0 1
  • 变量提升 JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结...
    此人长期不在线阅读 242评论 0 0
  • 第 1 题 立即执行函数表达式是什么?有什么作用? 1. 立即执行函数是什么 立即执行函数就是 声明一个匿名函数 ...
    红豆丁244阅读 407评论 0 0
  • 纯干货,没有废话 先看题目,诸位自测 题目1 题目2 题目3 结果 解密 1、函数在执行时先从自己内部的局部作用域...
    allen_tian阅读 245评论 0 0
  • JS的变量的作用域可分为全局变量和局部变量在JS函数内部可以直接读取全局变量,在函数内的局部变量外部是无法读取的,...
    王瓷锤阅读 165评论 0 0