JavaScript百炼成仙 函数七重关之三(参数传递),零基础如何成为高级前端开发

“没错了,结果就是undefined。其实,对于函数传参到底是怎么回事,可以把这个例子再次细分。刚才的函数中有一个参数a,那么这个参数自然也是属于函数作用域里面的,就相当于这样。”

function fun(){

var a;

console.log(a);

}

“为了方便理解,在关键的地方不犯糊涂。函数的参数,可以简单看成是在函数体,也就是花括号扩起来的地方,里面的第一行,定义了一个变量。因为我们并没有给这个变量赋值,所以这个局部变量就是undefined。可以这么说,任何变量在被赋予真正的值之前,在编译阶段都是undefined。或者说,任何变量,不管最终的值是什么,都曾经是undefined。这些函数的参数可以理解为一种预备变量。接下来说说正常的情况,比如我调用fun函数,传递一个参数18。那么传参的过程,就相当于是给预备变量赋值的过程。如果没有传参,那么预备变量自然还是undefined了。再回到刚开始的例子,如果我直传一个参数。”

function add(a,b,c){

var sum = a + b + c;

console.log(sum);

}

add(1);

“这种情况,a的值是1,b和c的值就是undefined,那么数字1和两个undefined相加会是多少呢,真是有意思的问题。结果是NaN,代表无法计算。没错,如果真的那样做,那么就是没有任何意义了。最起码,在这个函数中,那样的做法是毫无意义的。”

“好吧,那如果我多传一个参数会怎样呢?”对面弟子又来一个问题,大有一副不把叶小凡问道誓不罢休的意思。然后,令他没有想到的是,叶小凡立刻就有了回答。

“你说的这个问题,其实也可以单独拆解出来。就好比我定义了一个函数fun,没有参数,但是如果我在调用fun函数的时候,故意给它加了一个参数,会发生什么?比如,像这样。”

function fun(){

}

fun(10);

“结果是可想而知的,自然是什么都不会发生啦。再回到刚才的例子中去,就算你强行加了第四个参数,对结果自然也不会有什么影响的。”

function add(a,b,c){

var sum = a + b + c;

console.log(sum);

}

add(1,2,3,4);

“如果我一定要在函数里面访问到额外的参数咋办?”对面弟子一副问到你山穷水尽的气势,就连场外的某些弟子都看不下去了,心想这种问题实在是有些欺负人了。可是林元青在听到这个问题后,却不动声色地望向叶小凡,眼神中隐约流露出一份期待。

“这是可以办到的,其实所有的参数都会被装载到函数内部,一个叫做arguments的数组里面。比如这个add函数,虽然参数设置了abc三个,但是在函数的内部还维护了一个arguments数组。我可以用代码来验证。”

function add(a,b,c){

console.log(arguments);

var sum = a + b + c;

console.log(sum);

}

add(1,2,3,4);

代码运行,结果是

“可以看到,你传过来四个参数,其实就放进了这个默认的arguments数组里面。换句话说,参数列表里面的a、b、c也是根据这个数组来赋值的。现在,我把代码改写一下,就看的更清楚了。”

function add(a,b,c){

console.log(arguments);

a = arguments[0];

b = arguments[1];

c = arguments[2];

var sum = a + b + c;

console.log(sum);

}

add(1,2,3,4);

“嗯,根据这个特性,可以完成一些有趣的功能,比如,我可以编写一个函数,参数个数任意写,实现数字的累加。说得简单一些,就比方说,我调用add函数的时候,传入3个数字,那么就进行三个数字的累加。如果传入5个数字,就进行5个数字的累加。也就是说,不管你传入多少数字,我都可以给你实现一个累加。这便是一个非常灵活的累加器了。”说完,叶小凡一遍思考,一边开始写代码。

“因为实现我并不知道会有几个参数传进来,所以干脆就不设置任何参数了。”

function add(){

}

“这样,我先假设调用add函数的时候,最起码会有一个参数传进来。那么,先用arguments数组获取一下第一个位置的元素。如果第一个位置的元素都不存在,那么就返回0。”

function add(){

if(!arguments[0]){

return 0;

}

}

“接下来,因为不知道究竟会有多少个参数,也就是说arguments数组的长度也许是未知的。但是,arguments既然是一个数组,那么就会有length属性,这个属性里面放的就是arguments数组的内部元素个数了。这样看来,虽然我不知道会有多少个参数传进来。但是我们在函数的函数体中却可以通过arguments数组的length属性预知未来传入参数的个数。这样的话,我就只需要做一个简单的数组循环,就可以了。然后,将所有的数据累加起来,像这样。”

function add(){

if(!arguments[0]){

return 0;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

文末

我一直觉得技术面试不是考试,考前背背题,发给你一张考卷,答完交卷等通知。

首先,技术面试是一个 认识自己 的过程,知道自己和外面世界的差距。

更重要的是,技术面试是一个双向了解的过程,要让对方发现你的闪光点,同时也要 试图去找到对方的闪光点,因为他以后可能就是你的同事或者领导,所以,面试官问你有什么问题的时候,不要说没有了,要去试图了解他的工作内容、了解这个团队的氛围。

前端面试题汇总

JavaScript

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

性能

linux

前端资料汇总

ttps://img-blog.csdnimg.cn/img_convert/d7f6750332c78eb27cc606540cdce3b4.png)

linux

前端资料汇总

  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值