美文网首页
实参和形参

实参和形参

作者: 没头脑很不高兴 | 来源:发表于2017-11-05 20:27 被阅读0次

    之前没有注重基础,直接去后面看高级内容,结果是一点儿也看不懂,还耽误了很多时间,现在从基础、细节开始学JavaScript

    先看函数的形参和实参

    有下面这个函数

      function sum(a,b){
        return a+b
      }
      console.log(sum(1,5))
    

    这个就是一个简单的函数,其中a,b是形参,console里面的1,5是实参



    但是实际上参数的运用复杂很多

    arguments

    第一点,实参的形参的值的个数是可以不相等的
    在每个函数内部都有一个隐式的东西,叫做 arguments,实参列表,是一个数组(实际上是长得像数组的对象),用来接收所有的实参、而不用去管形参有多少个、是否能与实参对应。
    arguments.length可以返回实参的个数,这样我们就可以用一个循环把实参内的值全部输出。

      function sum(a) {
            for (var i = 0 ; i < arguments.length;  i++){
            console.log(arguments[i])
            }
      }
    sum(a,b,c,d)
    

    在这个函数里面,sum.length可以返回形参的个数,注意:这里sum不是一个数组,所以不可以用sum[i]来输出。
    当然,这样可以对任意个数求和,而不用提前设置形参的个数

      var result = 0
      function sum(c,d,e){
        for (var i = 0;i<arguments.length;i++){
          result += arguments[i]
        }
        console.log(sum[0])
        console.log(b)
    }
      
      sum(1,2,3,4,5,3,2,2,3)
    

    实参和形参的映射关系

    如下函数:

    function sum(a,b) {
        // arguments[1,2]
        // var a = 1   实参传进来后相当于对形参里面的a和b进行了这样的赋值
        var a = 2  // 重新赋值
        console.log(arguments[0]) //2  表明形参变实参也会变
        arguments[0] = 3 // 对第一个实参重新赋值
        console.log(a) // 3 实参变形参的值也会变
      }
      sum(1,2)
    

    在这里,实参和形参中任何一个变、另一个都会变,但这并不是因为他们是引用值(事实上,它们并不是引用值,而是原始值),而是因为它们之间是映射关系

    还有一种特殊情况

    如果实参的数量比形参少,如下代码

      function sum(a,b) {
        var b = 2
        console.log(arguments[1])
      }
      sum(1)
    

    这里的输出结果是undefined,说明实参的个数在它出生时就已经定义好了,后面再对形参进行修改,也不会影响到实参

    相关文章

      网友评论

          本文标题:实参和形参

          本文链接:https://www.haomeiwen.com/subject/ceehmxtx.html