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

闭包常见面试题_闭包的特点理解:什么是闭包?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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2014 中华架构师大会 回想[通俗易懂]

    2014 中华架构师大会 回想

    2022年1月31日
    57
  • 分布式架构设计之电商平台

    分布式架构设计之电商平台何为软件架构?不同人的答案会有所不同,而我认为一个好的软件架构除了要具备业务功能外,还应该具备一定的高性能、高可用、高伸缩性及可拓展等非功能需求。而软件架构是由业务架构和技术架构两部分组成,因为有了业务结构才会催生出软件架构,进而来满足业务上的需求,所以,在做软件架构设计时,需要分为业务架构设计和技术软件架构设计,二者不可分离哦!那么,接下来就以本人实际工作中的电商平台为例,进行说明电商平台架构设计,因为不同行业产品系统不同业务不同,而催生的系统软件的实现要求及架构设计就不同了!

    2022年6月29日
    24
  • pytest-allure_苹果11验机报告

    pytest-allure_苹果11验机报告前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

    2022年7月28日
    7
  • Java开发手册之集合处理[通俗易懂]

    Java开发手册之集合处理[通俗易懂]Java开发手册之集合处理

    2022年4月22日
    72
  • 关于sql和MySQL的语句执行顺序(必看!!!)[通俗易懂]

    关于sql和MySQL的语句执行顺序(必看!!!)[通俗易懂]今天遇到一个问题就是mysql中insertinto和update以及delete语句中能使用as别名吗?目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序:sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。一、sql执行顺序(1)from(3)join(2)on(4)where…

    2022年6月4日
    29
  • 支持向量回归模型SVR

    支持向量回归模型SVR1.SVM回归模型的损失函数度量    回顾下我们前面SVM分类模型中,我们的目标函数是让12||w||2212||w||22最小,同时让各个训练集中的点尽量远离自己类别一边的的支持向量,即yi(w∙ϕ(xi)+b)≥1yi(w∙ϕ(xi)+b)≥1。如果是加入一个松弛变量ξi≥0ξi≥0,则目标函数是12||w||22+C∑i=1mξi12||w||22+C∑i=1mξi,对应的约束条

    2022年5月13日
    36

发表回复

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

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