带参函数

JavaScript中的带参函数免费看

JavaScript 中的带参函数可以分为显式参数和隐式参数、默认参数、剩余参数

06-13侠课岛    基础入门       

前端/前端必修/JavaScript 基础知识梳理 13     0     331

上一节我们讲了如何定义函数和调用函数,并且我们知道了,JavaScript 中的函数,分为不带参的函数和带参的函数。而带参函数中的参数,又分为几种不同类型的参数,那么本节我们详细讲一下带参函数。

显式参数和隐式参数

函数的参数分为显式参数和隐式参数。显式参数就是所谓能看得见的参数,也就是在定义函数时,方法名括号中的参数,也可以叫做形参。JavaScript 语言中在定义显式参数时,不需要给参数指定数据类型。

而隐式参数就是在函数调用时传递给函数真正的值,也可以叫做实参。

示例:

下面代码中 ”name“ 和 “age” 就是显式参数,而调用函数时的 ”大侠“ 和 16 就是隐式参数:

默认参数

JavaScript 中函数参数的默认值都为 undefined,ES5 中不支持直接在显式参数(形参)里写默认值,所以要设置默认值就要检测参数是否为 undefined,按需求赋值。而 ES6 中已经支持默认参数,直接写就好了。在某些情况下设置不同的默认值是很有用的。

示例:

在 ES5 中,在给参数赋值之前,可能我们需要要判断一下参数的值是否是 undefined:

然而,在 ES6 中则可以直接使用默认参数,不需要进行判断:

不过要注意哟,这里是因为设置了默认参数,所以才可以不带参数调用函数。如果我们在定义函数时,设置了显式参数,那在调用时要记得加上隐式参数,否则会输出 undefined

剩余参数

JavaScript 中的剩余参数(rest parameters) 是指函数定义时以 ... 为前缀的参数,这个参数是一个没有对应形参(定义函数时的参数)的实参(调用函数时的参数)组成的一个数组。所以它与 arguments 有一定的区别,剩余参数中可以使用 pushmap 等数组方法。

语法如下:

function fun_name(arg1, arg2, ...argN) {
    // 代码块
}

剩余参数语法允许我们将一个不定数量的参数表示为一个数组。

示例:

例如我们定义一个函数,其中除了有两个明确的参数 a、b,还有一个剩余参数,如下所示:

function number(a, b, ...arg) {
  console.log(arg);
  arg.push(a, b);
  console.log(arg);
}

number(1, 5, 7, 9);

输出:

[ 7, 9 ]
[ 7, 9, 1, 5 ]

上述代码中 push 方法可以向数组的末尾添加一个或多个元素,并返回新的长度。

我们在调用函数的时候,给a、b两个参数赋值,剩余参数我们可以选择不赋值,或者赋多个值。也就是说它可以是 0 个或多个。

arguments 对象

JavaScript 函数中有一个内置的 arguments 对象。argument 对象中包含了函数调用的参数数组。

arguments 对象是所有(非箭头)函数中都可用的局部变量,我们可以使用 arguments 对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引 0 处。arguments 非常类似Array,但实际上又不是一个Array实例。

示例:

arguments 对象的长度是由实参个数而不是形参个数决定的,我们看下面这个例子:

function number(a, b, c){
  console.log("参数个数:" + arguments.length); 
  console.log(arguments[0], arguments[1], arguments[2]);  

  // 给参数赋值
  a = 9;
  b = 19;
  c = 29;
  console.log(arguments[0], arguments[1], arguments[2]);      
}

number(1, 11, 21, 31, 41);

输出:

参数个数:5
1 11 21
9 19 29

arguments[0] 表示第一个参数、arguments[1] 表示第二个参数,依次类推。

剩余参数和 arguments 对象之间的区别主要有三个:

  • 剩余参数只包含那些没有对应形参的实参,而 arguments 对象包含了传给函数的所有实参。
  • arguments 对象不是一个真正的数组,而剩余参数是真正的 Array 实例,也就是说你能够在它上面直接使用所有的数组方法,比如 sortmappop等。
  • arguments 对象还有一些附加的属性 ,例如 callee 属性。

本教程图文或视频等内容版权归侠课岛所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、转贴或以其他方式复制发布或发表。

评价

13

本课评分:
  •     非常好
难易程度:
  •     适中的

内容目录


本文索引


|
教程
粉丝
主页

签到有礼

已签到2天,连续签到7天即可领取7天全站VIP

  • 1
    +2 金币
  • 2
    +3 金币
  • 3
    +5 金币
  • 6
    +7 金币
  • 5
    +6 金币
  • 4
    暖心福利
    自选分类VIP ×1天
  • 7
    惊喜大礼

    自选分类VIP ×3天 +20金币
  • 持续签到 +8 金币

金币可以用来做什么?