带你深入理解什么叫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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jquery grid设置行背景色

    jquery grid设置行背景色项目中有一个需求,可以根据grid中某一列的

    2022年7月15日
    18
  • Thinkphp+Nginx(PHPstudy)下报的404错误,403错误解决

    Thinkphp+Nginx(PHPstudy)下报的404错误,403错误解决

    2021年10月12日
    56
  • MySQL(笔记)

    MySQL(笔记)数据库总览有时候查的数据错乱,可以重启MySQL关系型数据库(SQL)MySQL,Oracle,SQLServer,SQLite,DB2,…关系型数据库通过外键关联来建立表与表之间的关系非关系型数据库(NOSQL)notonlyRedis,MongoDB,…非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定DBMS数据库管理系统(DataBaseManagementSystem)数

    2022年5月19日
    35
  • java工资多少 程序员薪资很高吗?

    java工资多少 程序员薪资很高吗?北京程序员平均工资是12715元,和此相差无几的是上海、深圳。达内是专业做精英程序员人才招聘的。据调查可知:在工作年限上,3-5年的工程师平均薪酬是20K上下。而5年以后的工程师薪酬有了明显的上升,30K上下也是必须的。程序员的薪资都很高么,java程序员的薪资是多少呢?java新手工资一般多少?程序猿在世人眼里已经成为高薪、为人忠诚的代名词。然而,达内小编要说的是,不是所有的程序员工…

    2022年7月8日
    210
  • COM、COM+和DCOM的定义和区别

    COM、COM+和DCOM的定义和区别解释 COM COM 和 DCOM 的定义和区别 COM 是组件对象模型 是实现 3 N 层应用的基础 它的目的就是组件化 应用程序分层 DCOM 是分布式的 COM 也就说可以远程的创建 最初它利用远程自动化来实现 用注册 VBR 的方法来配置客户端 来适应 DCOM 服务器 COM 现在的概念不很清楚 因为它是一个扩展集 MS 现在的 MTS 取代了远程自动化这种原始的功能很弱的方法后 他们似乎已经都是一个集合体

    2025年7月9日
    3
  • 统信UOS命令大全 麒麟系统命令大全 Linux常用命令操作大全(非常全非常详细) ubuntu命令大全常用操作命令大全

    Linux常用命令大全(非常全!!!)最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因,比较短小但却功能强大。我将我了解到的命令列举一下,仅供大家参考:系统信息arch显示机器的处理器架构uname-m显示机器的处理器架构uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DMI)hdparm-i/dev/hd…

    2022年4月9日
    170

发表回复

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

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