带你深入理解什么叫js闭包

带你深入理解什么叫js闭包闭包用一句话总结:闭包就是作用域的延伸解释:函数内部的作用域属于局部作用域,导致只有函数内部才可以访问声明的变量。而闭包可以将局部作用域延伸,使其在函数外部也可以访问内部声明的变量等。关于变量的作用域js变量的作用域无非就两种局部变量和全局变量JavaScript在函数内部可以访问全局变量varn=0;//全局变量functionf1(){console.log(n)//0}f1();而在函数内部声明的局部变量,外部无法直接访问functionf1(

大家好,又见面了,我是你们的朋友全栈君。

闭包

用一句话总结:闭包就是作用域的延伸
解释:函数内部的作用域属于局部作用域,导致只有函数内部才可以访问声明的变量。而闭包可以将局部作用域延伸,使其在函数外部也可以访问内部声明的变量等。

关于变量的作用域

js变量的作用域无非就两种 局部变量全局变量

JavaScript在函数内部可以访问全局变量

var n = 0;//全局变量
function f1() { 
   
    console.log(n)//0
}

f1();

而在函数内部声明的局部变量,外部无法直接访问

function f1(){ 
   
    var n=0;//局部变量 
 	//需要注意的是一定要使用var关键字声明才会是局部变量
 	//若直接 n=0; n则是一个全局变量,外部可以访问
}
console.log(n)//n is not defined

此时思考一个问题,怎么样才能在外部访问函数内部的局部变量??

此时闭包的作用就体现出来了,看下方例子

function f1() { 
   
    var n = 0;
    // 此时f2函数就是闭包
    function f2() { 
   
        return n
    }
    return f2()
}
let n1 = f1();
console.log(n1)//0

解释:f1是f2的父级,所以在f2中可以访问f1中的局部变量,那么转换一下思路,通过 f2函数 将变量return出来,这样不就可以在f1函数的外部访问内部变量了吗

f2函数起到一个中间连接作用,在上面代码中f2函数就是闭包。换句话讲:闭包就是 可以访问到其他函数内部的变量 的函数

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150273.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ListView中实现部分刷新的两种方法

    ListView中实现部分刷新的两种方法ListView在开发中用到的地方非常多,我们经常是全部刷新来更新数据,如果只需要更新某一条数据,该怎么实现呢?我在项目中使用过以下两种方法:1.通过点击的位置,获取需要刷新那一列对应的控件,然后在控

    2022年7月2日
    30
  • 安装了anaconda 还需要单独安装pycharm吗_为什么anaconda安装不了

    安装了anaconda 还需要单独安装pycharm吗_为什么anaconda安装不了1、安装AnacondaAnaconda官方下载站点下载好直接安装,无脑下一步验证是否安装成功:安装完成之后,从Windows开始菜单,点击AnacondaNavigator菜单项。Navigator首页显示了一些应用,其中有Spyder已经默认安装好了,点击Launch按钮。Sypder是Python的一个简单的集成开发环境。启动Spyder应用后,在左侧输入hello.py文件,如下所示。然后点击Run按钮,运行hello.py…

    2022年8月29日
    17
  • allow_url_fopen与安全以及PHP libcurl

    allow_url_fopen与安全以及PHP libcurl  allow_url_fopen=ON常常会给服务器和管理员带来麻烦,但是经常性(至少我这样认为)的我们需要远程读取某个东西,如果设置allow_url_fopen=OFF将其关闭,我们就没有办法远程读取。  幸好我们有一个很好的PHP模块–curl。下面我就以一个例子说说我用curl远程读取的方法:  第一,allow_url_fopen=ON的情况下:

    2022年7月21日
    13
  • SNMP协议测试_nmap测试udp端口

    SNMP协议测试_nmap测试udp端口SNMP测试上文介绍了net_snmp的移植,移植完成之后需要测试,现在就介绍一下如何进行snmp的功能测试,还是在基于高通9607芯片开发的ME3630模块上进行测试,这里需要用到一个工具就是mibbrowser可以在其官网上下载http://ireasoning.com/mibbrowser.shtml是付费软件,我们可以下载个人版,但是个人版好像不支持v3版本的snmp,企业版是全部支持的但是只有30天的使用期限,这个项目里我只是做功能测试,30天足够了,就下载了企业版,对各个版本的SNMP都

    2022年10月16日
    5
  • 硬件知识指什么

    硬件知识指什么
    计算机硬件基础知识
    电脑硬件概述
    广义的硬件不是特指计算机硬件,而是指泛指一些设施、设备、材料等有形物质及无形的精神物质。
    硬件:构成电脑的物质实体,称为硬件。如主机、显示器、键盘、鼠标。
    “计算机硬件”的简称(中国大陆及香港用语,台湾叫硬体)。与“软件”相对。电子计算机系统中所有实体部件和设备的统称。从基本结构上来讲,电脑可以分为五大部分:运算器、存储器、控制器、输入设备、输出设备等。一般我们看到的电脑都是由:主机(主要部分)、输出设备(显示器)、输

    2022年7月22日
    7
  • PhpSpreadsheet读取excel「建议收藏」

    PhpSpreadsheet读取excel「建议收藏」PhpSpreadsheet composerrequirephpoffice/phpspreadsheet支持的格式格式读写OpenDocumentFormat/OASIS(.ods)✓✓OfficeOpenXML(.xlsx)Excel2007andabove✓✓BIFF8(.xls)Excel97anda…

    2025年12月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号