zoukankan      html  css  js  c++  java
  • 闭包

    要了解闭包,需要先了解下JS变量的作用域

    变量的作用域无非就是两种:全局变量和局部变量

    特点是 函数内部可以访问外部变量,函数外部不能访问函数内的变量

    那么如何从外部读取局部变量?

    那就是在函数的内部,再定义一个子函数,这个子函数可以访问外部的变量,然后父函数把这个子函数

    return,让外部可以通过子函数访问自己的局部变量

    function f1(){
    var n = 9;
    function f2(){
    console.log(n)
    }
    return f2;
    }
    var result = f1();
    result();
    这就是实现闭包的方法

    所谓“闭包”,就是在构造函数体内定义另外的函数作为目标对象的方法函数,而这个对象的方法函数反过来引用外层函数体中的临时变量。这使得只要目标 对象在生存期内始终能保持其方法,就能间接保持原构造函数体当时用到的临时变量值。尽管最开始的构造函数调用已经结束,临时变量的名称也都消失了,但在目 标对象的方法内却始终能引用到该变量的值,而且该值只能通这种方法来访问。即使再次调用相同的构造函数,但只会生成新对象和方法,新的临时变量只是对应新 的值,和上次那次调用的是各自独立的

    闭包在子作用域中保存了一份在父级作用域取得的变量,这些变量不会随父级作用域的销毁而销毁,因为他们已经常驻内存了

    特性:
    1.函数嵌套函数
    2.函数内部可以引用外部的参数和变量
    3.参数和变量不会被垃圾回收机制

    缺点:闭包会使变量始终保存在内存中,如果不当使用会增大内存消耗。

  • 相关阅读:
    静态变量、静态方法说明
    DataGridView导出成excel实例
    异步执行小例子
    多线程操作的例子
    xmlReader遍历xml文档案例
    C#自动登录网页浏览页面 抓取数据
    datatable序列化成xml,xml反序列化成datatable
    TreeView递归法动态添加节点
    今天写的一个导出html页面的过程
    利用委托的BeginInvoke防止界面假死的实例
  • 原文地址:https://www.cnblogs.com/zhanghaifeng123/p/11845386.html
Copyright © 2011-2022 走看看