📜  JavaScript闭包

📅  最后修改于: 2020-10-27 01:12:36             🧑  作者: Mango

JavaScript闭包

闭包可以定义为JavaScript功能,其中内部函数可以访问外部函数变量。在JavaScript中,每次创建闭包时都会创建一个函数。

该闭包具有三个作用域链,列出如下:

  • 进入自己的范围。
  • 访问外部函数的变量。
  • 访问全局变量。

让我们通过一个例子来了解闭包。

例1










输出量

4 4

在上面的程序中,我们有两个函数:fun()和innerfun()。函数fun()创建局部变量a和函数innerfun()。内部函数innerfun()仅存在于fun()的主体中。内部函数可以访问外部函数的变量,因此函数innerfun()可以访问变量’a’,该变量在fun()中声明和定义。

这是作用中的闭包,内部函数可以访问全局变量和外部函数变量。

由于语句return innerfun,函数innerfun()的整个主体将返回并存储在变量输出中。内部函数不能仅通过使用return语句来执行;仅在大括号()之后才执行。

在输出中,代码将显示在父函数定义的变量’a’的值。

现在,还有另一个示例,我们将使用参数化函数

例2










输出量

16 20

在上面的程序中,有两个参数化的函数:fun()和innerfun()。函数fun()的参数为a,函数innerfun()的参数为b。函数fun()返回一个函数innerfun(),该函数接受一个参数并返回a和b的乘法。在程序中,输出为闭包。

现在,还有另一个在循环中关闭的示例。

例子3










输出量

0 1 2 3 4

闭包指向变量并存储变量的引用。他们不记得变量的值。在上面的代码中,我们将在每次调用时更新函数closure()参数。因此,我们将在不同的索引处获得变量i的不同值。

闭包是JavaScript概念中较难理解的概念之一,但是请尝试在不同的场景中实践闭包,例如创建回调,getters / setter。