javascript闭包经典面试题

javascript闭包经典面试题functionfun(n,o){  console.log(o)  return{    fun:function(m){      returnfun(m,n);    }  };}vara=fun(0); a.fun(1); a.fun(2); a.fun(3);var

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

Jetbrains全系列IDE稳定放心使用

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);

:三行输出分别是什么?

 

首先第一行,先看var a = fun(0),把0传入fun(n,o)中,那么n=0o=undifine

fun(n,o) return{
fun:function(m){returnfun(m,n);}};

所以a就等于{
fun:function(m){return fun(m,0);}};

所以a.fun(1)=function(1){return fun(1,0);}=fun(1,0),所以会输出0

同样a.fun(2)=function(2){return fun(2,0);}=fun(2,0),输出0,以此类推,a.fun(3)也输出0

所以最终输出的结果为:undifine0,0,0

再来看第二行,fun(0)输出undifinefun(0).fun(1)=a.fun(1)=fun(1,0)={fun:function(m){return fun(m,1);}};输出0

fun(0).fun(1).fun(2)=function(2){return fun(2,1);}=fun(2,1)={fun:function(m){return fun(m,2);}},输出1

以此类推,fun(0).fun(1).fun(2).fun(3),

最终按次序输出的是:undifine0,1,2

最后看第三行,var c = fun(0).fun(1),根据上面两行的推理,输出的是undifine0

c={fun:function(m){return fun(m,1);}},c.fun(2)=function(2){return fun(2,1);},输出1

c.fun(3)=function(3){return fun(3,1);},输出的还是1

所以第三行输出的是:undifine0, 1, 1

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/189601.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一文搞定7大流行后端框架:Spring、Netty、MyBatis、Hibernate、Dubbo…「建议收藏」

    一文搞定7大流行后端框架:Spring、Netty、MyBatis、Hibernate、Dubbo…「建议收藏」框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文(Context)关系。因此构件库的大规模重用也需要框架。今天给大家分享49篇【后端编程框架】相关精选学习资…

  • Entity Framework 4 in Action读书笔记——第五章:域模型映射(Domain model mapping)(二)…

    Entity Framework 4 in Action读书笔记——第五章:域模型映射(Domain model mapping)(二)…

  • 补码加、减运算规则「建议收藏」

    补码加、减运算规则「建议收藏」在计算机中,通常总是用补码完成算术的加减法运算。其规则是:  [X+Y]补=[X]补+[Y]补,[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号…

  • Android 代码混淆机制

    Android 代码混淆机制Android代码混淆机制由于Android项目大部分用的java语言,而java属于高层抽象语言,易于反编译、反汇编,其编译后的程序包包含了大量的源代码变量、函数名、数据结构等信息,根据其编译打包后的APK文件,可以非常容易的得到近乎源代码质量的反编译代码。如果不加混淆,相当于直接将源代码拱手送人,内容严密的app权限审核可以说是形同虚设。如果大家想避免源代码泄漏后重新修改策划而额外增加的工

  • 写给新入IT的新人们

    写给新入IT的新人们

    2021年11月23日
  • ASP.NET_SessionId 何时生成?何时失效?有何作用呢?

    ASP.NET_SessionId 何时生成?何时失效?有何作用呢?相信做asp.netweb开发的码友们,对ASP.NET_SessionId一定不陌生。ASP.NET_SessionId保存在浏览器cookie中。那么它是来源于哪里?何时生成?何时失效?有何作用呢?带着这些疑问,我们开始探寻它。废话不多说,实践才是检验真理的最好方法,直接上代码。打开VS建立一个APS.NETMVC程序,在HOME页面添加如下代码:clearSession和clearSessionId这两个是ajax方式请求过去的,不会刷新页面,对应的后台方法如下:对应的action代

发表回复

您的电子邮箱地址不会被公开。

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