zoukankan      html  css  js  c++  java
  • 什么是javascript闭包?

    在我们开发中,也经常使用到闭包,但当有人问什么是闭包,就会可能说不上来。那就谈谈一些基本的:

    一.理解闭包的概念,

    简单说当function里嵌套function时,内部的function可以访问外部function里的变量,而外部的function不能直接访问内部的function的变量,当你return的是内部function时,就是一个闭包。看下面例子说明:

    1.嵌套的函数可以访问在其外部声明的变量。

     function fn(x) {
          var z = 1;
          function fnc(y) {
            alert(x + y + (++z)); //alert为7
          }
          fnc(2);
        }
        fn(3)
    fnc既可以访问fn的参数x,也能访问到fn的变量z,但这不是闭包。

    2.外部声明的变量下获取到局部变量中的变量

    
    
    function fn(x) {
    var z = 1;
    return function (y) {
    alert(x + y + (++z));//alert为7
    }
    }
    var bar = fn(2); // 现在是一个闭包
    bar(3);

    其实理解起闭包的概念真的费敬,个人理解就是:闭包就是能够读取其他函数内部变量的函数,是将函数内部和函数外部连接起来的桥梁。

     

    二。闭包好处与坏处

     好处:

    1.保护函数内的变量安全 ,实现封装,防止变量流入其他环境发生命名冲突,

    2.匿名自执行函数可以减少内存消耗,在匿名自执行函数传入一个闭包函数,匿名自执行函数执行完立即销毁,可以减小内存消耗。

    坏处:被引用的私有变量不能被销毁,增大了内存消耗,造成内存泄漏。


    了解闭包更详细,请参考链接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

     

  • 相关阅读:
    【Python】supervisor安装和管理celery
    【MySQL】pt-query-digest数据处理并关联业务
    【Python】pip国内安装源和yum恢复
    【Python】Celery异步处理
    【转】Java中堆和栈的区别
    三种简单排序算法
    哈夫曼(Huffman)编码
    SpringMVC之文件上传
    SpringMVC之类型转换
    SpringMVC之表单校验
  • 原文地址:https://www.cnblogs.com/lwming/p/11025578.html
Copyright © 2011-2022 走看看