首页 电脑 电脑学堂 查看内容

JavaScript闭包吧

2016-9-30 12:35 1100 0

摘要: 让我们一起学习JavaScript闭包吧闭包是JavaScript中的一个基本概念,每一个认真的程序员都应该对它了如指掌。互联网上充斥着大量关于“什么是闭包”的解释,却很少有人深入探究它“为什么”的一面。我发现理解闭包的 ...

让我们一起学习JavaScript闭包吧

闭包是JavaScript中的一个基本概念,每一个认真的程序员都应该对它了如指掌。

互联网上充斥着大量关于“什么是闭包”的解释,却很少有人深入探究它“为什么”的一面。

我发现理解闭包的内在原理会使开发者们在使用开发工具时有更大的把握。所以,本文将致力于讲解闭包是如何工作的以及其工作原理的具体细节。

希望在你能从中获得更好的知识储备,以便在日常工作中更好地利用闭包。让我们开始吧!

什么是闭包?

闭包是 JavaScript (以及其他大多数编程语言) 的一个极其强大的属性。正如在MDN (Mozilla Developer Network) 中定义的那样:

 

闭包是指能够访问自由变量的函数。换句话说,在闭包中定义的函数可以“记忆”它被创建的环境。

注:自由变量是既不是在本地声明又不作为参数传递的一类变量。(译者注:如果一个作用域中使用的变量并不是在该作用域中声明的,那么这个变量对于该作用域来说就是自由变量)

 

让我们来看一些例子:

Example 1:

在 GitHub 上查看 rawnumberGenerator.js 

在以上例子中,numberGenerator 函数创建了一个局部的自由变量 num (一个数字) 和 checkNumber 函数 (一个在控制台打印 num 的函数)。checkNumber 函数没有自己的局部变量,但是,由于使用了闭包,它可以通过 numberGenerator 这个外部函数来访问(外部声明的)变量。因此即使在 numberGenerator 函数被返回以后,checkNumber 函数也可以使用 numberGenerator 中声明的变量 num 从而成功地在控制台记录日志。

Example 2:

最新评论