闭包

安稳与你 提交于 2020-02-26 02:14:42

闭包的定义

  • 是JS中,函数的一种高级应用方式
  • 在一个函数的外部,能够访问函数内部局部变量的函数,称为闭包,或者闭包函数。

闭包的特点

  • 作用域空间不销毁
  • 可以通过闭包语法,从外部访问函数内部变量
  • 保护私有变量

好处:减少全局变量,减少内存空间的占用

函数的执行空间
在ES5及以前,函数是区分全局和局部唯一的代码块
函数内的局部变量,会在函数执行完毕后销毁

function fn(){
    var a = 10;
    consloe.long(a);
}
fn();

每一次函数执行时,代码会重新的载入内存,foo执行完毕后,里面的局部变量会被销毁,内存中的代码被销毁,但是foo还在,代码还在。

function foo(){
    var a = 10;
    function bar(){
        consloe.log(a++);
    }
    bar();
}
foo();//10
foo();//10

按照之前的理论,a在foo函数外部是访问不到的,但是,因为闭包的存在,导致函数foo的外部能够访问a,并且a还不会被销毁。

function foo(){
    var a = 10;
    function bar(){
        console.log(a++);
    }
    return bar;
}
//foo();//f执行结果是返回了一个函数bar,有没有输出,就看bar有没有执行。
//foo()();
var num = foo();//num =>function(){console.log(a++)}
num();
num();//此时函数内部没有被销毁仍可访问

垃圾回收机制
垃圾回收机制就是为了清内存,两种方式:标记清除、引用计数

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!