JavaScript闭包closure详述

 更新时间:2022年01月24日 15:09:41   作者:bear*6  
这篇文章主要大家分享的是JavaScript闭包详述,在JavaScript部分,闭包是很重要的东西,所以我们今天就闭包的相关知识做一个总结,需要的朋友可以参考一下,希望对你有所帮助

前言:

JavaScript部分,闭包是很重要的东西,所以我们今天就闭包的相关知识做一总结。首先,在了解闭包前,我们先要知道作用域的相关知识,前面 作用域相关博文有解释,这里不在赘述。接下来我们来看一下什么是闭包?

一、什么是闭包

闭包(closure)指有权访问另一个函数作用域中变量的函数。 ----- JavaScript 高级程序设计

简单理解闭包就是一个函数,他的特点是:一个作用域可以访问另外一个函数内部的局部变量。

举个简单的例子:

比如说我们现在有一个函数,在他的内部我们定义了一个局部变量,如果别的作用域可以访问这个局部变量,就产生了闭包。所以我们在该函数内部再定义另一个函数,看看里面的函数作用域是否可以访问外函数中的局部变量。

 function f1(){
            var num = 10;
            function f2(){
                console.log(num);
            }
            f2();
        }
        f1();

打印的结果为:

可以发现成功将值打印出来,所以就产生了闭包。
但是有的读者可能就有疑问:f2函数本身就在f1函数的内部,它本来就可以使用父函数的变量。那我们再在f1函数的外部的作用域访问该变量,看看结果又是如何。

我们将f2函数的调用改为f1函数的返回值,然后在函数外面调用f1函数,如下:

 function f1(){
            var num = 10;
            function f2(){
                console.log(num);
            }
           return f2()
        }
        var f = f1();
        f();

此时,就相当于f1外部的作用域访问其内部函数的变量。打印结果为:

可以发现,这里也可以使用其内部的局部变量,闭包产生。

所以可以得出结论:

闭包: 一个作用域可以访问另外一个函数内部的局部变量。

二、 闭包的作用

我们知道,在函数内部定义的局部变量,只能在函数内部可以使用,并且当我们使用完成后它就会被销毁,但是有闭包以后,这个局部变量就会在函数外部使用并且要等它的外部调用者调用完毕后才会被销毁,所以闭包的作用就是:延伸了变量的作用范围。

到此这篇关于JavaScript闭包closure详述的文章就介绍到这了,更多相关JavaScript闭包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 实现微信小程序的wxml文件和wxss文件在webstrom的支持

    实现微信小程序的wxml文件和wxss文件在webstrom的支持

    这篇文章主要介绍了实现微信小程序的wxml文件和wxss文件在webstrom的支持的相关资料,需要的朋友可以参考下
    2017-06-06
  • 微信小程序 删除项目工程实现步骤

    微信小程序 删除项目工程实现步骤

    这篇文章主要介绍了微信小程序 删除项目工程实现步骤的相关资料,这里对删除小程序的步骤进行详解和注意事项,需要的朋友可以参考下
    2016-11-11
  • 动态加载iframe

    动态加载iframe

    动态加载iframe...
    2006-06-06
  • 微信小程序 image组件binderror使用例子与js中的onerror区别

    微信小程序 image组件binderror使用例子与js中的onerror区别

    这篇文章主要介绍了微信小程序 image组件binderror使用例子与js中的onerror区别的相关资料,需要的朋友可以参考下
    2017-02-02
  • 详解 TypeScript 枚举类型

    详解 TypeScript 枚举类型

    这篇文章主要介绍了TypeScript 枚举类型,TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚举就是一个字典,文章内容围绕TypeScript 枚举类型展开内容,需要的朋友可以参考一下
    2021-10-10
  • 打包非 JavaScript 静态资源详情

    打包非 JavaScript 静态资源详情

    这篇文章主要介绍了打包非 JavaScript 静态资源,打包工具中的自定义导入,种常见的方法是利用已有的静态导入语法。有些打包工具可能会通过文件扩展名来自动检测格式,而有些其他打包工具则允许插件使用自定义的 URL Scheme,下面具体内举例说明,需要的朋友可以参考一下
    2021-10-10
  • 微信小程序 WebSocket详解及应用

    微信小程序 WebSocket详解及应用

    这篇文章主要介绍了微信小程序 WebSocket详解及应用的相关资料,需要的朋友可以参考下
    2017-01-01
  • JS中轻松遍历对象属性的几种方式

    JS中轻松遍历对象属性的几种方式

    这篇文章主要给大家介绍的是JS中轻松遍历对象属性的几种方式,文章从自身可枚举属性、Object.values() 返回属性值、Object.entries()来展开介绍,感兴趣的小伙伴可以参考一下
    2021-09-09
  • 微信小程序 富文本转文本实例详解

    微信小程序 富文本转文本实例详解

    这篇文章主要介绍了微信小程序 富文本转文本实例详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • 微信小程序template模板实例详解

    微信小程序template模板实例详解

    这篇文章主要介绍了微信小程序template模板使用的相关资料,希望通过本文能帮助到大家,让大家理解掌握这样的功能,需要的朋友可以参考下
    2017-10-10

最新评论