VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > JavaScript >
  • JavaScript教程之js世界这么大,闭包想看看

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

 
什么是闭包,为什么要用他?
闭包是能够访问其他函数作用域的函数。
我们来分析下句子成分(语文大神),闭包是函数,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;





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


相关教程