简述JavaScript中的闭包原理

一句话可以概括:闭包就是能够读取其他函数内部变量的函数,或者子函数在外调用,子函数所在的父函数的作用域不会被释放。


JavaScript中的闭包是指一种 相对的空间概念:
我们拿我们所处空间来举例:

我们当下所坐在房间里,这个房间就形成了一个封闭的闭包空间
房间包裹着我们,我们在房间内部,可以访问房间中的任何东西,比如
空调,电视,电脑,水杯……
如果我们现在的书桌,有一个抽屉,这个抽屉则又形成了一个闭包空间
假设 抽屉里有一只猫 和 一些 玩具,那么那只猫则可以随意访问那些玩具,而我们则不能访问
那么相对于我们所在的小房间,则有一个大房间包裹着我们这个小房间,
大房间里的其他人无法直接访问到我们小房间的内部
如果我们想要访问 包裹着我们房间的其他大盒子 则只需要我们走出当前小盒子即可

1.png

我们需要记着三个空间概念:
1.当前空间
2.属于当前空间的子空间
3.当前空间的父空间

当前空间 -> 当前空间
当前空间 -> 当前空间的父空间
当前空间 !-> 当前空间的子空间

//代码说下
function a(){
  var n = 0;
  function inc() {
    var s = 666;
    n++;
    console.log(n);
  }
  inc(); 
  inc(); 
}
a(); //控制台输出1,再输出2

//在这里 如果a是当前空间时a 能访问自己空间中的数据n,但无法访问其子空间inc中的 数据s
//如果inc 是当前空间时  inc可以访问 属于当前空间的变量s ,
//也可以访问到包裹着自己的父级空间的a下的变量n

你可能感兴趣的:(简述JavaScript中的闭包原理)