当前位置: 首页 > Web前端 > HTML

看似简单的问题席卷了几十个前端群,王宏远老师亲自解答

时间:2023-03-28 01:06:45 HTML

前言大家好,我是林三鑫,座右铭是用最通俗易懂的方式讲解最难的知识点条款。它以先进为前提是我的初衷。首先说明一下,这不是头条党,是真的。这个问题刷了几十个群,能回答的人寥寥无几。最后,就连王宏远老师也亲自出面回答了这个问题。我们先看看这个问题是什么样子的。varx=1;functionf(x,y=function(){x=3;console.log(x);}){console.log(x)varx=2y()console.log(x)}f()console.log(x)////1.上面代码的输出是什么?////2。如果注释掉varx=2,输出结果是什么?////3。如果把f函数的第一个参数x改成xx,输出结果是什么?////4。如果将f函数的第一个参数x设置为默认值4,输出结果是什么?对于第一题,很多同学已经答错了第一题。可能同学们会想出两种答案:1,undefined,3,3,12,undefined,3,2,3其实通俗一点就是两种思路1.参数y中的x=3函数更改全局x。2、参数y函数中的x=3改变了函数f内部的x。但实际上,这两种想法都是错误的,因为大部分同学只看到了两个x1,全局的x2,f函数内部的x,而实际上忽略了另一个x3,f函数的参数x。事实上,参数y函数中的x=3实际上改变了f函数的参数x,而不是全局x或f函数内部x,所以正确的输出应该是undefined,3,2,1varx=1;functionf(x,y=function(){x=3;console.log(x);}){console.log(x)//参数x没有默认值,所以:undefinedvarx=2y()//改变的是参数x,输出参数x,所以:3console.log(x)//输出是局部x,所以:2}f()console.log(x)//全局x没有effect,so:1second第二个问题就简单多了。去掉varx=2后,f函数内部还有一个x,就是参数x,所以f函数内部的console.log(x)是根据参数xvar的实时值输出的x=1;函数f(x,y=function(){x=3;console.log(x);}){console.log(x)//参数没有默认值,so:undefined//varx=2y()//改变参数x=3,输出参数x,so:3console.log(x)//实时参数x的值,所以:3}f()console.log(x)//全局的x没有作用,所以:1第三题第三题,改变参数x到参数xx,则参数y函数的x=3改变全局x,因为参数x没有了,因为就近原则,y函数中的x指向全局xvarx=1;functionf(xx,y=function(){x=3;console.log(x);}){console.log(x)//var变量提升但未赋值,所以:undefinedvarx=2y()//x=3改变全局x,并输出全局x,所以:3console.log(x)//x=3改变全局x,而不是局部x,所以:2}f()console.log(x)//globalx被y函数改变所以:3第四个问题第四个问题是让参数x默认等于4。与第一个问题不同的是参数x是否有默认值varx=1;functionf(x=4,y=function(){x=3;console.log(x);}){console.log(x)//参数x的默认值,so:4varx=2y()//改变的是参数x=3,并且输出参数x,所以:3console.log(x)//输出的是本地x,所以:2}f()console.log(x)//全局的x没有作用,所以:1结语如果觉得这篇文章对你有点帮助,点个赞,鼓励一下林三心哈哈哈或者可以加入我的摸鱼群,一起努力学习吧,我会定期模拟面试,简历指导,答疑解惑,大家互相学习,共同进步!!