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

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

  • 相关阅读:
    转:C++ 智能指针的正确使用方式
    C/C++各个周期的学习
    转: 工作中用的C++库
    转:【软件设计】深入理解日志系统的意义
    初级爬虫第四天
    初级爬虫第三天
    初级爬虫第二天
    初级爬虫第一天
    pep8介绍
    MySQL训练营01
  • 原文地址:https://www.cnblogs.com/zhanghaifeng123/p/11845386.html
Copyright © 2011-2022 走看看