闭包常见面试题_闭包的特点

闭包常见面试题_闭包的特点理解:什么是闭包?1.密闭的容器,类似set/map容器,用来存储数据2.闭包是一个对象,存放数据的格式:key:value闭包形成的条件1.函数嵌套2.内部函数引用外部函数functionfun(){varcount=1;functionfun2(){//条件1:函数嵌套//形成条件2:内部函数引用外部函数console.log(count);}}fun();已经形成了闭包,以键值对的形式保存数据在外部.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

理解:什么是闭包?

1.密闭的容器,类似set/map容器,用来存储数据

2.闭包是一个对象,存放数据的格式:key:value

闭包形成的条件

1.函数嵌套

2.内部函数引用外部函数

function fun(){
    var count = 1;
    function fun2(){//条件1:函数嵌套
    //形成条件2:内部函数引用外部函数
    console.log(count);
    }
}
fun();

已经形成了闭包,以键值对的形式保存数据

闭包常见面试题_闭包的特点

 在外部函数里面去调用fun2()

function fun(){
    var count = 1;
    function fun2(){//条件1:函数嵌套
    //形成条件2:内部函数引用外部函数
    console.log(count);
    }
    fun2();
}
fun();

fun2()执行之前断点,存在闭包

闭包常见面试题_闭包的特点

 fun2()执行之后断点,闭包不在了,因为fun2()执行完成后,作用域销毁,释放内存,里面的闭包同时被销毁

闭包常见面试题_闭包的特点

 闭包的应用场景:

将内部的函数返到外部去

function fun(){
    var count = 1;
    return function (){
    console.log(count);
    }
}
var fun2 = fun();
fun2();
fun2();

闭包常见面试题_闭包的特点

 闭包的优点:

延长外部函数局部变量的生命周期

闭包的缺点:

优点也是缺点,本应被销毁的变量,因为闭包的原因没有被销毁,长期存在的话,容易造成内存泄漏

注意点:

1.合理使用闭包

2.用完闭包要及时清除(销毁),避免内存泄露

基本面试题

function fun(){
    var count = 1;
    return function (){
    count ++
    console.log(count);
    }
}
var fun2 = fun();
fun2();
fun2();

fun2()分别输出什么?

2/3

分析:

第一次执行return匿名函数执行count++ ,输出count = 2

第二次执行闭包起作用,第一次为被销毁

经典面试例题:

function fun(n,o){
    console.log(o);
    return{
        fun:function(m){
            return fun(m,n)
        }
    }
}
var a = fun(0)
a.fun(1)
a.fun(2)
a.fun(3)
var b = fun(0).fun(1).fun(2).fun(3)
var c = fun(0).fun(1)
c.fun(2)
c.fun(3)

函数内部有函数就已经满足了闭包的条件。

fun(0)

输出o为undefined:fun(0)只传一个参数赋值给n,o输出为undefined {n = 0}

a部分:

a.fun(1):a.fun代表内部函数的fun,执行内部函数,m = 1=>n,n=>o从内部向外部执行,n获取上次闭包值为0对应o,输出 o = 0 {m = 1}

a是返回对象 fun:function(m){ return fun(m,n) },闭包保存在a 中,闭包又是用来存储介质对的,认为key是n,存储的值是0,也就是说a 里面有一个闭包n值为0,所以每次传值不论传什么值进去,都是复制给m了,但通过闭包n值始终不变,n=0恒成立,所以:

var a = fun(0)
a.fun(1)
a.fun(2)
a.fun(3)

输出为:undefined,0,0,0

b部分:

var b = fun(0).fun(1).fun(2).fun(3)

由上述推导知:fun(0) = undefined

fun(0).fun(1)相当与a.fun(1),结果为0,返回值是个对象,n = 0

fun(0).fun(1).fun(2),返回值是个新的对象内部存储的闭包也是新的,和上面不同,n = 1

fun(0).fun(1).fun(2).fun(3),n = 2

总结:

当前传入的参数为多少并不重要,重要的是上一步给闭包中传入的key为多少

例如:

var x = fun(0).fun(1).fun(2).fun(3).fun(12).fun(33).fun(78)

输出依次为:undefined/0/1//2/3/12/33

c部分:

var c = fun(0).fun(1)
c.fun(2)
c.fun(3)

输出依次:undefined/0/1/1

前端面试官问闭包,怎样回答脱颖而出_不爱吃糖的程序媛的博客-CSDN博客_前端面试闭包该怎么回答

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

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

(0)
上一篇 2022年8月30日 上午7:16
下一篇 2022年8月30日 上午7:16


相关推荐

  • 最新 | 腾讯回应被指责抄袭!

    最新 | 腾讯回应被指责抄袭!

    2026年3月13日
    12
  • 一文解读Manus AI核心功能与技术原理

    一文解读Manus AI核心功能与技术原理

    2026年3月15日
    2
  • 百度识图解析_蒙眼识字是什么原理

    百度识图解析_蒙眼识字是什么原理百度识图原理分析推测其发展方向    2010年12月13日,百度推出相似图片搜索功能—百度识图(shitu.baidu.com),常规的图片搜索,是通过输入关键词的形式搜索到互联网上相关的图片资源,而百度识图则能实现用户通过上传图片或输入图片的url地址,从而搜索到互联网上与这张图片相似的其他图片资源,同时也能找到这张图片相关的信息。     百度的相似图片搜索识图

    2025年10月24日
    4
  • hibernate5二级缓存配置

    hibernate5二级缓存配置hibernate默认有一个一级缓存,就是默认的Session缓存,当我们做了一次查询,hibernate会把这个结果缓存起来,叫做一级缓存,当我们接着在这个Session会话里面再做一次同样条件的查询,hibernate不会再次查询数据库,而是直接在一级缓存中获取结果并返回。一级缓存是内置的,他也不能被卸载。一级缓存是指在同一个Session会话内的查询做的缓存,如果跨了Session,或者当前…

    2022年5月23日
    31
  • 破坏ice的服务器消息,我的世界:ICE服务器炸,矛头指向Mn,但真相另有隐情!…

    破坏ice的服务器消息,我的世界:ICE服务器炸,矛头指向Mn,但真相另有隐情!…在游戏界中,有一场游戏玩家之间的“战争”,那就是《我的世界》和《迷你世界》。这场战争本来已经停息了很久,但是又因为某些事情,让它快速的发酵了起来。这件事情的原由是因为《我的世界》的ICE服务器被炸,具体经过小编下面为大家讲解。3月25号(大约时间),一个名为ICE的《我的世界》服务器被其他玩家恶意毁坏了,里面的建筑变得残破不堪,而服务器的存档也仅仅只有数天前的。要知道,这些建筑是很多玩家用大量的时…

    2022年6月12日
    53
  • CentOS镜像下载「建议收藏」

    CentOS镜像下载「建议收藏」CentOS6系统安装1、首先打开网易开源镜像站:http://mirrors.163.com/当然,大家也可以使用阿里开源镜像站:http://mirrors.aliyun.com/2、点击进入centos目录。3、因为我们选择安装centos6.5版本系统,所以点击进入6.5/目录4、我们打开里面的readme文件,找到下载地址:http://vault.cento…

    2022年6月9日
    118

发表回复

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

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