js中函数参数的实现原理

不言
不言 原创
2018-07-16 14:58:43 1341浏览

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函数的实参,形参以及闭包的理解

js的函数声明和函数表达式的分析

以上就是js中函数参数的实现原理的详细内容,更多请关注php中文网其它相关文章!

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。