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

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

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

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

<!DOCTYPE html>
<html>
<head>
<script>
function fun()
{
var a = 4;//'a' is the local variable, created by the fun()
function innerfun()//the innerfun() is the inner function, or a closure
{
return a;
}
return innerfun;
}
var output = fun();
document.write(output());
document.write(" ");
document.write(output());
</script>
</head>
<body>

</body>
</html>

输出

4 4

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

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

由于语句return innerfun,整个函数 innerfun()被返回并存储在变量 output 中。内部函数不能仅通过使用 return 语句来执行;仅在紧跟括号()执行。

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

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

<!DOCTYPE html>
<html>
<head>
<script>
function fun(a)
{
function innerfun(b){
return a*b;
}
return innerfun;
}
var output = fun(4);
document.write(output(4));
document.write(" ");
document.write(output(5));
</script>
</head>
<body>

</body>
</html>

输出

16 20

在上面的程序中,有两个参数化的函数: fun() innerfun()。函数 fun()具有参数 a ,而函数 innerfun()具有参数 b 。函数 fun()返回函数 innerfun(),该函数接受一个参数并返回 a b 。

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

链接:https://www.learnfk.com/javascript/javascript-closures.html

来源:LearnFk无涯教程网

<!DOCTYPE html>
<html>
<head>
<script>
function fun()
{
function closure(val)
{
return function()
{
return val;
}
}
var a = [];
var i; 
for (i = 0; i < 5; i++)
{
a[i] = closure(i); 
}
return a;
}
var output = fun();
document.write(output[0]());
document.write(" ");
document.write(output[1]());
document.write(" ");
document.write(output[2]());
document.write(" ");
document.write(output[3]());
document.write(" ");
document.write(output[4]());
</script>
</head>
<body>

</body>
</html>

输出

0 1 2 3 4

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

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

无涯教程网

这一章你学到了什么?来做个笔记,好记忆不如烂笔头! 如果觉得对您有帮助,麻烦帮分享给您的朋友😊😊

祝学习愉快!(如果觉得不正确,选中要修改的内容->右键->编辑)

点我分享笔记