通常来讲,闭包通常是指函数内部可以访问到外部作用域的一个过程。

一、广义的定义:任何函数都产生了闭包。

二、狭义的定义:函数内部能访问到其他变量函数的作用域。

我们来看个例子

var a = 10;

function closure() {
console.log(a);
} closure(); // 10;
// 这里引用了全局作用域下定义的a变量,从广义上讲,这里产生了一个闭包,也是最简单的闭包。

再从狭义上来看

function closure() {
var a = 10;
  return function foo() {
    console.log(a);
}
} var test = closure(); //此时test = 内部函数foo
test();         // 10; 这里又产生了一个闭包

在上面的例子中,我们依旧可以看到内部产生了闭包。

当调用closure函数后,函数返回值是foo函数。

同时,foo函数内部保持着对closure内部定义的变量a引用。

一般来讲,当函数执行完毕后,内部作用域会被销毁,

但由于例子中产生了闭包,一直保持着引用,故作用域未能如期销毁。

可能导致内存泄漏等问题。

销毁作用域(闭包)

// 当每个函数里的作用域不再需要时
function foo() {
} foo = null;
//直接赋值null 销毁内部的作用域

一些纠结的点

在了解闭包这个概念时,我一直很纠结闭包到底是什么,怎么去用

但其实来讲,闭包是一种设计理念,可以通过闭包来设计私有方法和变量。

避免全局变量的污染。

所以,不要太纠结,它只是一个理念,知道它能做什么事情就行了。

有疏漏的地方还请指出,谢谢~

最新文章

  1. JSF 与 HTML 标签的联系
  2. spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能
  3. iOS NSDate、NSCalendar、NSDateComponents
  4. OpenXML操作word
  5. Windows Message Codes
  6. Net Configuration Assistant和Net Manager的区别
  7. jQuery手机端点击弹出分享按钮代码
  8. Windows 10 IoT Core 17093 for Insider 版本更新
  9. MySQL/MariaDB表表达式(3):视图
  10. github 操作
  11. npm 更新版本
  12. sql server 横向转丛向及FOR XML PATH使用
  13. WPF 中动态改变控件模板
  14. stm32_DMA采集一个AD数据_并通过DMA向串口发送
  15. Webbench是有名的网站压力测试工具
  16. 我的一起开源网 www.17ky.net上线了
  17. 使用Cache缓存
  18. Css-浅谈如何将多个inline或inline-block元素垂直居中
  19. Java NIO简单介绍(二)
  20. asm demo

热门文章

  1. 一致性哈希server的数据维护
  2. [WebGL入门]十二,模型数据和顶点属性
  3. HDU 5305 Friends(简单DFS)
  4. POJ 3468 A Simple Problem with Integers(线段树区间更新)
  5. UVA1601 The Morning afther Halloween
  6. E: Unable to lock the administration directory (/var/lib/dpkg/)
  7. java enum int String 相互转换
  8. PCB Winform使用谷歌webkit内核 应用
  9. Ruby Range类
  10. yum 安装redis