zoukankan      html  css  js  c++  java
  • JavaScript中函数的形参和实参的实现原理剖析

    我们都知道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是一种弱类型的语言嘛!

  • 相关阅读:
    java之正则表达式
    mysql之自定义函数
    mysql之replace into与 insert into duplicat key for update
    mysql之命令行导入导出
    Echarts修改legend样式
    ubuntu出现 E: Sub-process /usr/bin/dpkg returned an error code
    ubuntu总是提是E: 不能满足依赖关系。不妨试一下 -f 选项
    ubuntu安装和查看已安装软件
    放爬虫nginx
    nginx日志切割
  • 原文地址:https://www.cnblogs.com/manfredHu/p/4419737.html
Copyright © 2011-2022 走看看