🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

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

2019-02-10

回答

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

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

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

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

加分回答

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

返回总目录

每天 30 秒


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

1 评论
adj520778 • 2019-06-29
回复 删除

w3c对闭包好像有很详细的解释。

var iBaseNum = 10;

function addNum(iNum1, iNum2) {
  function doAdd() {
    return iNum1 + iNum2 + iBaseNum;
  }
  return doAdd();
}