js中函数的形参和实参的实现是不同的,在进行参数传递的时候,有时候可能实参的传递可能与形参对不上号,那么怎么样才能将它们之间对上号呢?这是我们就需要对js中参数的实现原理进行研究了。
我们都知道JS里面参数的传递是可以不一样的,比如我们有一个函数:
<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是一种弱类型的语言嘛!
相关推荐:
以上就是js中函数参数的实现原理的详细内容,更多请关注php中文网其它相关文章!
已抢65518个
抢已抢30032个
抢已抢16402个
抢已抢8354个
抢已抢10783个
抢已抢22168个
抢