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.参数和变量不会被垃圾回收机制

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

  • 相关阅读:
    Java用freemarker导出word
    springMVC集成缓存框架Ehcache
    java爬虫入门--用jsoup爬取汽车之家的新闻
    基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建
    spring aop实现日志收集
    ELK + kafka 日志方案
    大数据挖掘方案
    elasticsearch例子(crud + 分页)
    分类(category)是门学问
    英语单词辨异 —— 容易理解错的单词
  • 原文地址:https://www.cnblogs.com/zhanghaifeng123/p/11845386.html
Copyright © 2011-2022 走看看