• 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"
    

      

  • 相关阅读:
    SQL-W3School-函数:SQL FORMAT() 函数
    SQL-W3School-函数:SQL NOW() 函数
    SQL-W3School-函数:SQL ROUND() 函数
    SQL-W3School-函数:SQL LEN() 函数
    SQL-W3School-函数:SQL MID() 函数
    SQL-W3School-函数:SQL LCASE() 函数
    SQL-W3School-函数:SQL UCASE() 函数
    SQL-W3School-函数:SQL HAVING 子句
    27:级数求和
    26:统计满足条件的4位数个数
  • 原文地址:https://www.cnblogs.com/zhu-xingyu/p/5222483.html
Copyright © 2020-2023  润新知