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


相关推荐

  • Java和MySQL数据类型对应一览

    Java和MySQL数据类型对应一览Table20.25.MySQLTypestoJavaTypesforResultSet.getObject()MySQLTypeNameReturnvalueofGetColumnClassNameReturnedasJavaClassBIT(1)(newinMySQL-5.0)BITjava.lang.Bool

    2022年6月3日
    130
  • 图片循环滚动代码详细介绍[通俗易懂]

    图片循环滚动代码详细介绍[通俗易懂]以下是代码片段:                   var rollspeed=10 rolllink2.innerHTML=rolllink1.innerHTML function Marquee(){ if(rolllink2.offsetTop-rolllink.scrollLeftrolllink.scrollLeft-=rolllink1.of

    2022年7月18日
    15
  • b4什么意思_f0是什么车

    b4什么意思_f0是什么车AndroidEagleEyeAnXposedandadbibasedmodulewhichiscapableofhookingbothJavaandNativemethodstargetingAndroidOS.Relatedinformationofthehookedmethodswillbeloggedastheoutput.Us…

    2022年8月16日
    4
  • md文件编辑_第三方编辑器

    md文件编辑_第三方编辑器学长让我写博客学习c语言,写了几篇,但是总觉得文章界面不好看,然后找到一些资料,那就开始新的界面吧!开始你的MD编辑器吧!!(妈的编辑器)复制,直接应用>块引用@[TOC]#二.使用步骤##1.引入库##2.读入数据点一下蓝色的字,到相应的文章段<fontcolor=red>关注</font>这是设置字体颜色,和范围,“`cimportnumpyasnpimportp…

    2022年9月23日
    3
  • json字符串数组转json数组

    json字符串数组转json数组当需要把一串字符串转成一个json数组,并遍历其中的内容时。首先要导入net.sf.json.JSONArray和net.sf.json.JSONObject两个jar包<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version><c

    2022年6月21日
    104
  • 网络编程学习笔记一:Socket编程

    网络编程学习笔记一:Socket编程“一切皆Socket!”话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有

    2022年7月13日
    15

发表回复

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

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