js世界这么大,闭包想看看

2018-06-24 02:08:48来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

什么是闭包,为什么要用他?
闭包是能够访问其他函数作用域的函数。
我们来分析下句子成分(语文大神),闭包是函数,js函数的作用域分为全局作用域,局部作用域,eval作用域,并没有块级作用域形象的讲,每个函数都是一个小黑屋,能在小黑屋里看到外面的的世界,可是外界不知道小黑屋里是啥情况,如何打开门从小黑屋出来呢,就用到了闭包。

有几个概念必须要了解
作用域和作用域链
原来作用域和上下文作用域是两个不同的概念,本质上来说,作用域是基于函数的,上下文是基于对象的,作用域规定了当前执行环境对变量的访问权限,这是js中最重要一个概念。
作用域链(词法作用域):当查找变量的时候,会先从变量本身查起,如果本身没有就从父级对象上查找,一直查到全局上下文变量对象,若无返回undefine,这个由多个执行上下文对象构成的链表就叫做作用域链。

闭包的特点:
1、函数内再嵌套函数
2、内部函数可以引用外层的参数和变量。
3、参数和变量不会被垃圾回收机制回收

闭包的使用注意事项
  函数会使得函数中的变量保存在内存中,会占用内存,所以只有在必要的时候使用它,如果不用的话要将他为null

MMP Show Me The Code
function example(){
     var n=1;                              
        function example2(){       
          alert(n);     
        };    
        return example2;   
}   
var result=example();   result(); // 1
在自己函数内部定义一个函数,然后再将函数值return回去
function example1(){ 
  var n=1; 
  Add
= function() { n+=1 }   function example2(){     alert(n);   }   return example2; }
var result=example1(); result(); // 1 Add(); result(); // 2
解析:result();
函数定义了一个变量 ,调用时直接返回一个函数,example2里面没有n,沿着作用域链向上找到了n=1;
Add();执行后n的值为2;
然后example2向上查找时n就变成了2;





小结:整理了一下午,到处查资料,原来探究越深才知道知道的越少,这些东西很重要,检验你是否学好可以试着给别人讲懂。
由于自身能力有限,有些错误在所难免,欢迎指正,荣幸之至。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:冒泡排序和鸡尾酒排序的代码分析

下一篇:关于端口冲突的解决方式Error: listen EACCES 0.0.0.80