实参和形参

之前没有注重基础,直接去后面看高级内容,结果是一点儿也看不懂,还耽误了很多时间,现在从基础、细节开始学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,说明实参的个数在它出生时就已经定义好了,后面再对形参进行修改,也不会影响到实参

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容