闭包

1.闭包的含义

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是一个函数内部创建另一个函数

2.闭包用途

1).读取函数内部的变量

  function f1(){
    var n=999;
    function f2(){ //闭包
      return n;
    }
    return f2;
  }
  var result=f1();
  console.log(result()); // 999

2).让变量的值始终保持在内存中

第一次result结束,内部变量n没有被释放,而是是被闭包持有

  function f1(){
    var n=999;
    nAdd=function(){n+=1} //函数内部属性不用var修饰会变全局变量
    function f2(){
        console.log(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); //1000
<script>
    var nodes = document.getElementsByTagName('div');
    for(var i = 0, len = nodes.length; i < len; i++){
        //会发现每次点击div,弹出的不是实际的i,而是len
        //因为onClick是异步触发的,当事件触发,for循环早已介绍了
        nodes[i].onClick = function(){
            console.log(i);
        }
    }

    for(var i = 0, len = nodes.length; i < len; i++){
        //使用闭包,作用域链会先从闭包里面查找i变量,闭包的属性会持久留在内存中
        (function(i){//接收i
            nodes[i].onClick = function(){
                console.log(i);
            }
        })(i);//传入i
    }

</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容