我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript闭包详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript闭包详解

1.什么是闭包?

函数本身和该函数声明时所处的环境状态的组合。

1.2 闭包的记忆性:函数能够记住定义时所处的环境

1.3 闭包现象:JS中每次创建函数时都会创建闭包

2.闭包的功能:记忆性、模拟私有变量

2.1 记忆性

举例:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function createCheckTemp(standardTemp){
            function checkTemp(n){
                if(n<=standardTemp){
                    alert('你的体温正常');
                }else{
                    alert('你的体温偏高');
                }
            }
            return checkTemp;
        }
        var checkTemp_A=createCheckTemp(37.1);
        var checkTemp_B=createCheckTemp(37.3);
        checkTemp_A(37.2);
        checkTemp_A(37.0);
        checkTemp_B(37.2);
        checkTemp_B(37.0);
    </script>
</body>
</html>

细节:

1:闭包的记忆性

2:函数return checkTemp,是一个函数名

3:定义var checkTemp_A和checkTemp_A来获取函数名checkTemp,而不是直接调用

2.2 模拟私有变量(安全化变量)

闭包代码举例:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 封装一个函数,这个函数的功能就是私有化变量
        function fun(){
            // 定义一个局部变量a
            var a=0;
            return {
                getA:function(){
                    return a;
                },
                add:function(){
                    a++;
                },
                pow:function(){
                    a*=2;
                }
            }
        }
        var obj=fun();
        // 如果想在fun函数外面使用变量a,唯一的方法就是调动getA()方法
        console.log(obj.getA());
        // 想让变量a进行+1操作
        obj.add();
        obj.add();
        obj.add();
        console.log(obj.getA());
        obj.pow();
        console.log(obj.getA());
    </script>
</body>
</html>

其实可以理解,JavaScript不像C++、Java那样能定义函数的类型,比如int sum()、int add()、int pow()等等,所以就需要利用闭包的特性:即在函数内闭包的记忆性来对函数内变量进行操作,然后返回闭包函数的名称来进行内部数据操作。

3.IIFE(Immediately Invoked Function Expression,立即调用函数表达式):

JS特殊函数,一旦被定义,就立即被调用

3.1 IIFE作用1-为变量赋值

举例:

前后两图对比一下,体现编程水平。。。简化代码。。美观。。。

3.2 IIFE作用2-将全局变量变为局部变量

这种情况下,下面五个语句的结果都是5,因为在JS中是没有块作用域这个概念的(暂时这么理解),所以var i就成了全局变量,for循环后i=5。所以五个语句的结果都是5。

那么加下来可以利用IIFE解决这个问题,其本质是利用了函数的闭包特性

全局变量i传入IIFE函数中,全局变量 就 变成了局部变量,再利用JS函数的闭包特性,即可以实现图中arr[2]()的功能。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript闭包详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

一文详解JavaScript中的闭包

JavaScript 闭包是一种重要的概念,在 JavaScript 编程中被广泛使用。尽管它可能会让初学者感到困惑,但它是理解 JavaScript 语言核心的关键概念之一。
2023-05-14

python 闭包详解

闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。函数和对象的
2023-01-31

详解JavaScript中的闭包是如何产生的

这篇文章主要为大家详细介绍了从内存管理的角度来看,JavaScript中的闭包是如何产生的。文中的示例代码简洁易懂,感兴趣的小伙伴可以了解一下
2022-12-28

Python闭包与闭包陷阱举例详解

闭包并不只是一个Python中的概念,在函数式编程语言中应用较为广泛,下面这篇文章主要给大家介绍了关于Python闭包与闭包陷阱的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-01-28

怎样解析javascript的闭包

今天就跟大家聊聊有关怎样解析javascript的闭包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是闭包:闭包是一个存在内部函数的引用关系。该引用指向的是外部函数的局部变量对象
2023-06-29

关于javascript解决闭包漏洞的一个问题详解

闭包在JavaScript高级程序设计(第3版)中是这样描述:闭包是指有权访问另一个函数作用域中的变量的函数,下面这篇文章主要给大家介绍了关于javascript解决闭包漏洞的一个问题的相关资料,需要的朋友可以参考下
2022-11-13

编程热搜

目录