什么是闭包?

吐槽君 分类:javascript

什么是闭包?

  1. 闭包的含义就是闭合,简单的说就是一个具有封闭风格与包裹功能的一个结构,所以闭包就是一个具有封闭对外不公开的包裹结构或空间

  2. 在js中函数可以构成闭包,即一个函数是一个代码结构的封闭结构,即包裹的特性。根据作用域规则,只允许函数访问外部的数据,外部无法访问函数内部的数据,即封闭的对外不公开的特性,因此说函数可以构成闭包

    举个例子:var foo = (function(){return {}或者 return function(){}})()

闭包要解决的问题

  1. 闭包不允许外界访问
  2. 要解决的问题就是直接或间接的范围内部数据

函数可以构成闭包,解决的问题就是外部可以访问函数内部的数据

  1. 函数内部的数据直接return 是可以访问到函数内部的数据的,但是该数据不能第二次访问,因为第二次访问的时候又要调用一个函数,表示会有一个新的数据出来
  2. 在函数内部的数据,不能直接被函数外部访问,所以在函数内部定义一个函数,那么这个内部函数是可以直接被访问的(即访问闭包中的数据)
  3. 0 级俩无法访问1级链中的数据,所以可以通过操作2级链来访问1级链的数据

闭包的基本结构

  1. 一般闭包的问题就是要使用访问间接的获取函数内部数据的使用权:

    有2个基本使用模型

    • 写一个函数,函数内部定义一个新函数,返回这个新函数,利用函数获取内部的数据
    • 写一个函数,函数内部定义一个对象,对象中绑定多个函数,返回对象,利用对象的方法访问函数内部的数据

闭包的基本用法

  1. 闭包是为了实现具有私有访问空间的函数
  2. 带有私有访问数据的对象
    • 私有数据,就是值有函数内部可以访问的数据,或对象内部的方法可以访问的数据
  3. 带有私有数据的函数

闭包的性能问题

  1. 函数执行需要内存,那么函数定义的变量,会在函数执行结束后自动回收(即垃圾回收),凡是因为闭包被引出的数据,如果还有变量在引用,这些数据就不会被回收。,
  2. 引出使用闭包的时候,如果不使用某一些数据了,一定要给他赋值一个NULL(IE浏览器一定要写)
  3. 函数运行需要内存,函数运行结束,内存回收
  4. 闭包中的数据被外界访问后,函数执行结束后不能将其回收,如果闭包过过,会造成内存泄露(即闭包中的数据被访问后不会被回收,如果闭包过多,数据一致堆叠在内存中,会找出内存泄露)(所以有一些数据不在使用的时候,如果有变量还在引用这个数据,就把这个变量赋值为空)

回复

我来回复
  • 暂无回复内容