JavaScript中函数的形参和实参的实现原理剖析
2017-12-29 12:19
267 查看
我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数:
我们传递的数字只有一个1,但是形参那里有abc三个。这分明对不上啊不是吗?
这个时候如果我们查看b,c的话会显示undefined。ps:比如console.log(b)。
当然啦,本来就没有这两个数。怎么找给你?
那面对这种实参和形参对不上号的情况,JS是怎么实现的呢?让我们来看一段代码:
这里我们在one函数里面返回了one.length,在two函数里面返回arguments.length。可能你已经发现了,输出的one()返回了one.length就是形参的数量,而argument.length就是实参的数量。
瞬间秒懂了有木有?
甚至我们可以用arguments[0]取到实参的数字。
但是为什么没有形参的数字可以用类似数组的方式这样表示呢?好吧,我知道你是处女座的凡事要求对称。除非你形参是数组你可以这样用。不然在函数里面我们就只能用形参的名字来取得实际的参数了。
在C#,Java里面对参数类型和个数相对JS来说要求十分严格,一点对不上就报错了。而JS就因为有这样的设计而可以变成相对灵活的语言。
上述方法就是JS依赖的不强制对形参和实参规定个数相等的实现了。至于类型的相同,JS什么类型都可以写成var a = ……,要类型何用?所以才说JS是一种弱类型的语言嘛!转自:https://www.cnblogs.com/manfredHu/p/4419737.html
<script type="text/javascript"> function one(a,b,c) { this.x = a; console.log(a); } one(1); </script>
我们传递的数字只有一个1,但是形参那里有abc三个。这分明对不上啊不是吗?
这个时候如果我们查看b,c的话会显示undefined。ps:比如console.log(b)。
当然啦,本来就没有这两个数。怎么找给你?
那面对这种实参和形参对不上号的情况,JS是怎么实现的呢?让我们来看一段代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>JavaScript中函数的形参和实参的区别</title> </head> <body> <script type="text/javascript"> function one(a,b,c) { return one.length; } function two(a,b,c,d,e,f,g){ return arguments.length; } console.log(one()); //3 console.log(two()); //0 </script> </body> </html>
这里我们在one函数里面返回了one.length,在two函数里面返回arguments.length。可能你已经发现了,输出的one()返回了one.length就是形参的数量,而argument.length就是实参的数量。
瞬间秒懂了有木有?
甚至我们可以用arguments[0]取到实参的数字。
但是为什么没有形参的数字可以用类似数组的方式这样表示呢?好吧,我知道你是处女座的凡事要求对称。除非你形参是数组你可以这样用。不然在函数里面我们就只能用形参的名字来取得实际的参数了。
在C#,Java里面对参数类型和个数相对JS来说要求十分严格,一点对不上就报错了。而JS就因为有这样的设计而可以变成相对灵活的语言。
上述方法就是JS依赖的不强制对形参和实参规定个数相等的实现了。至于类型的相同,JS什么类型都可以写成var a = ……,要类型何用?所以才说JS是一种弱类型的语言嘛!转自:https://www.cnblogs.com/manfredHu/p/4419737.html
相关文章推荐
- JavaScript中函数的形参和实参的实现原理剖析
- javascript 函数 add(1)(2)(3)(4)实现无限极累加 —— 一步一步原理解析
- 【代码】结构体做函数参数,实现形参向实参传递值
- 通过自定义函数实现3个数的排列,形参和实参!
- JavaScript几种类工厂实现原理剖析
- Objective-C内存管理教程和原理剖析(三)@property (retain)和@synthesize的默认实现
- 剖析Vue原理&实现双向绑定MVVM
- javascript dom 学习笔记 第九章:实现给某个元素添加加新的class的值的函数!
- poll函数的实现原理
- taobao-pamirs-proxycache开源缓存代理框架实现原理剖析
- 实现JavaScript中eval()函数的功能
- SendMessage、PostMessage函数的实现原理
- 深入云存储系统Swift核心组件:Ring实现原理剖析
- 深入剖析基于并发AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理
- JavaScript实现按键精灵的原理分析
- 关于函数strtok和strtok_r的使用要点和实现原理
- 深入php内核,从底层c语言剖析php实现原理
- javascript 流畅动画实现原理
- 理解Javascript_11_constructor实现原理
- struts2拦截器的实现原理及源码剖析