美文网首页
关于闭包

关于闭包

作者: Smile_1024 | 来源:发表于2018-03-23 20:02 被阅读0次

闭包的英文是closure,又称词法闭包(Lexical Closure)和函数闭包(Function Closure)

概念:闭包是由函数以及创建该函数的词法环境组合而成。这个环境包含了这个闭包创建时所能访问的所有局部变量。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。

举例:

参考MDN

闭包的特性

1.封闭性:外界无法访问到闭包内部的数据,如果在闭包内声明变量,外界是无法访问的,除非闭包主动向外界提供访问接口。

2.持久性:一般的函数调用结束之后,系统会自动注销函数。而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用。

优点:1.保护内部变量不被外界所污染,内部变量也不污染外部变量。2.可以通过返回值访问内部变量的值。3.封装

缺点:使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等。(转载)

在IE9之前,如果闭包的作用域链中保存着一个HTML元素,那么意味着该元素无法被销毁。这里DOM对象element引用闭包函数,闭包函数作用域引用DOM对象,循环引用导致内存泄露。 解决方法:先把element.id用局部变量id保存起来,并且在闭包中引用该变量消除了循环引用。但是,这样还不能消除内存泄露,闭包会引用包含函数的活动变量,而其中会有element。即使闭包闭包不直接引用element,包含函数的活动对象仍然会保存一个引用,因此有必要把element设为null。

使用场景

1.采用函数引用方式的setTimeout调用。

2.将函数关联到对象的实例方法

3.封装相关的功能集

相关文章

  • 闭包介绍

    闭包 关于闭包的定义: A closure is the combination of a function an...

  • SwiftUI 里的 swift 闭包总结

    创建 UI 时的闭包使用 在 SwiftUI 里闭包出现的频率特别高,这里我重新梳理了下闭包的定义。 关于闭包 闭...

  • JavaScript - 闭包

    理解 关于闭包 答案: 用arguments.callee和闭包实现的函数封装 应用 利用闭包实现自动递增计数

  • 关于闭包

    闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达...

  • 关于闭包!!!

    写这篇文章时的心情是十分忐忑的,因为对于我们今天的主角:闭包,很多小伙伴都写过关于它的文章,相信大家也读过不少,那...

  • 关于闭包

    闭包的定义: MDN javascriptkit 词法作用域 (lexical environment) 函数在执...

  • 关于闭包

    闭包的英文是closure,又称词法闭包(Lexical Closure)和函数闭包(Function Closu...

  • 关于闭包

    卡尔维诺中文站留言板这个帖子专门用作卡尔维诺中文站的留言板,欢迎大家留言和提问。...阮一峰2007-01-04T...

  • 关于闭包

    尾随闭包(Trailing Closures) * 如果函数需要一个闭包参数作为参数,且这个参数是最后一个参数,而...

  • 关于闭包

    1. 什么是闭包? 有什么作用 闭包: 作用:1.可以读取函数内部的变量:(如)0_1482243109358_Q...

网友评论

      本文标题:关于闭包

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