JS重点特性——闭包详解

   闭包特性:可以让定义好的函数作用域在调用时发生改变,具体说,调用运行时,可以让(定义时)作用域外其他函数访问到本函数的局部变量甚至参数。举例代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
     <script>
     
        function personOne(){
         var name="huanhuan";
         function test(){return name;}
         return  test;
        }


        function personTwo(){
         return  personOne()(); //personOne()返回属性test()函数对象,再执行一次取得值,为"huanhuan"

        }
        console.log(personTwo()); //"huanhuan"
     </script>
    
</body>
</html>

  personOne()定义完成时作用域链已确定,外部函数不能访问其内部局部变量及参数,但在personTwo()调用时发生了改变,可以访问到前者的局部变量。这个特性是个技巧点,也容易带来一些麻烦。

      闭包的作用主要有三点:

      第一点:控制作用域内的变量外泄,因为js中不存在块级作用域容易造成块内作用域的变量跑出,但是可以用闭包思想进行控制,形式一般如下:

            

  (function(){
      var i;
      var a;
   })(i=3,a=5);

  

      第二点:可以让外部其他的作用域访问到本内部作用域中内容。

      第三点:可以模仿私有变量的获得:

function fn1(){
  var pro1="pro1";
   this.fn2=function(){return pro1;}
}
var ob1=new fn1();
ob1.fn2(); //return "pro1"

  

posted @ 2016-02-27 10:55  光辉的一角  阅读(302)  评论(0编辑  收藏  举报