美文网首页
JS闭包理解应用

JS闭包理解应用

作者: Zero_R | 来源:发表于2019-02-28 15:25 被阅读0次

闭包:

简单来说:

闭包就是函数中的函数,就是说一个函数要访问另外一个目标函数内部的变量,就要在目标函数中再定义一个函数(以此来把作用域链往下延长一段,目的就是为了利用js在找自由变量时,会沿着作用域链一级一级往上找的特点),并将这个定义的函数return出来,供外部使用。

JS 的闭包包含以下要点:
  1. 函数声明的时候,会生成一个独立的作用域。
  2. 同一作用域的对象可以互相访问。
  3. 作用域呈层级包含状态,形成作用域链,子作用域的对象可以访问父作用域的对象,反之不能;另外子作用域会使用最近的父作用域的对象。

闭包是指有权访问另一个函数作用域内变量的函数。 -- 《JavaScript高级程序设计》


说到闭包就得提什么是GC(垃圾回收机制)

垃圾回收文章

简单来说:
  1. 如果变量没有被引用JS会隔一段时间周期性的释放变量占用的内存空间。
  2. 全局变量不会被回收,只有浏览器卸载页面时才会结束。
function a() {
    var x = 1
    var y = 100
    console.log(y)
    y++
    return function b() {
        console.log(x++)
    }
}
var result= a()
//100
result()//1
result()//2
//
分析:

当执行result()时为什么输出x累加呢?y为什么不输出,这里的y没有被全局变量引用所以被JS垃圾回收销毁所以不会输出。
多次执行result()输出累加的x说明x并没有被销毁,因为b函数被映射到了全局变量result上,而b函数又依赖x变量,所以a函数中的x并不会被销毁。


闭包应用:

在实际开发中,闭包主要是用来封装变量实现公有私有变量,收敛权限。

优点:
  1. 变量长期驻扎在内存中。
  2. 避免全局变量的污染。
  3. 私有成员的存在。
缺点:

因为不会被GC回收,所以常驻内存,会增大内存的使用量,使用不当会造成内存泄露。

相关文章

  • JS闭包理解应用

    闭包: 简单来说: 闭包就是函数中的函数,就是说一个函数要访问另外一个目标函数内部的变量,就要在目标函数中再定义一...

  • 一分钟理解js闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 一分钟带你弄懂闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 什么是闭包?几分钟告诉你

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 一分钟带你弄懂闭包

    一分钟理解js闭包,关于js闭包的内容介绍了很多,本文带着大家快速理解什么是js闭包,感兴趣的小伙伴们可以参考一下...

  • 理解Js的闭包

    闭包是Js的一个难点,也是它的一个特色,很多高级应用都要靠闭包来实现。 1.变量的作用域 要理解闭包,首先必须要理...

  • JS闭包入门

    最近有看到朋友的面经里提到的JS闭包的问题,就想研究研究,以下是我对JS闭包的简单理解。 到底什么是JS闭包? 定...

  • JS 闭包(Closure)

    参考阮一峰老师的JS 闭包 理解闭包前需要理解变量作用域、变量提升 JS作用域 那如何让它依次打印,12345呢;...

  • js闭包应用

    function func(n,k){ document.write(k+" "); return{ fu...

  • JS闭包理解

    闭包的概念 闭包就是能够读取其他函数内部变量的函数。 一、变量的作用域 要理解闭包,首先必须理解Javascrip...

网友评论

      本文标题:JS闭包理解应用

      本文链接:https://www.haomeiwen.com/subject/lqnhuqtx.html