Sym - 一个用 Java 实现的现代化社区平台 • 源码注册

Pipe - 小而美的开源博客平台 • 体验皮肤
Solo - 一个用 Java 实现的博客系统,为你或你的团队创建个博客吧! • 源码下载
Wide - 一个基于 Web 的 Go 语言 IDE • 教程试用

什么是闭包?请给出一个有用的示例

2019-02-10

回答

闭包是一个定义在其他函数内部的函数,他由函数及创建该函数的词法环境组合而成,这个环境包含了这个闭包创建时所能访问的所有局部变量。闭包可以访问三种作用域中的变量:

  • 自身函数内声明的变量
  • 父函数作用域中的变量
  • 全局中声明的变量

在 JavaScript 中所有函数都是闭包的,因为他们都可以访问外部作用域,但是大部分函数都没有充分利用闭包的优势:状态持久化。因此闭包有时也被称为一个有状态的函数。

此外,闭包是在 JavaScript 中可以使存储的私有数据不能被外部所访问的唯一方式。他们的关键是 UMD(Universal Module Definition)模式,这经常用于 js 库中只暴露公共 API 但隐藏实现细节的场景,这样可以防止和其他库或用户自己的代码发生名称冲突。

加分回答

  • 闭包是非常有用的,因为他们能让你将数据和对该数据操作的的函数相关联。
  • 闭包可用于模拟私有属性和方法。
  • 闭包可以替代只有一个方法的对象。
  • 在不必要的情况下,应尽可能避免使用闭包。因为闭包在处理速度和内存消耗方面对脚本的性能具有负面影响。
  • 在 ES2015 前,可使用闭包来解决含有循环的异步回调中变量被重用的问题:var

返回总目录

每天 30 秒


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

留下你的脚步