zoukankan      html  css  js  c++  java
  • javascript中闭包最简单的简绍

    javascript中闭包是什么

    JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。闭包就是将函数内部和函数外部连接起来的一座桥梁。
    函数的闭包使用场景:比如我们想要一个函数来执行计数功能。
    如果设计全局变量
     1 var counter=0; 2 function add(){ 3 4 return counter++;}  
    // add();
    在浏览器调用 add();//值为2
    问题是如何当我们设计另外一个方法时用到需要counter这个变量,我们在进行修改无疑会改变counter的初始值如下
    <script> 
     var counter=0; 

    function add(){ 
    return counter++;} 

    function plus(){ return counter=5; } plus();
    </script>  
    我们此时在调用add() 值就是6 所以设置counter变量为全局变量的时候我们调用函数会得到不想要的值;
     
    思考?如果使用局部变量 
     
    function add(){
    var counter=0;
    return counter++ ;
    }
    调用add()结果永远是0,函数运行到 counter=0;就覆盖变量;
    所以我们需要函数外部可以读取函数变量内部的值,下面就对函数进行了私有化 在 JavaScript 中,所有函数都能访问它们上一层的作用域
    JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。
    该实例中,内嵌函数 plus() 可以访问父函数的 counter 变量
      function add() {
                var counter=0 ;
                function plus (){
                    counter++; 
                } 
                plus();
                return counter;
             }
    

      

    闭包的写法
    函数的立即执行()() 及函数的声明和函数的执行放在一起
    这就是闭包的最终格式
           var plus=(function add() {
                var counter=0;//定义为局部变量
              return  function(){
                    counter++;//
                 console.log("counter"+counter);
                }
            })()
    

      调用plus()  ;

          闭包就是将函数内部和函数外部连接起来的一座桥梁。

       这篇文章https://www.cnblogs.com/lsc-boke/p/6513278.html写了闭包对内存的影响
     
  • 相关阅读:
    聊聊、Highcharts 动态数据
    聊聊、Zookeeper Linux 启动
    聊聊、Zookeeper 客户端 Curator
    聊聊、Zookeeper 客户端 ZkClient
    聊聊、Zookeeper API
    聊聊、Zookeeper 数据结构和操作命令
    聊聊、Java 网络编程
    《Mysql 索引
    《Mysql 事务
    《Mysql 一条 SQL 更新语句是如何执行的?(Redo log)》
  • 原文地址:https://www.cnblogs.com/illusory/p/9869927.html
Copyright © 2011-2022 走看看