JavaScript函数的参数

357 阅读3分钟

一、概述

函数的参数分为形参实参。

形参: 在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。

实参: 如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。

// 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部
// 带参数的函数声明
function 函数名(形参1, 形参2, 形参3...) {
  // 函数体
}
 
// 带参数的函数调用
函数名(实参1, 实参2, 实参3); 
形参1 = 实参1
形参2 = 实参2
形参3 = 实参3
...

注意事项:

函数最终的运算结果由实参所解决定;

不论形参还是实参,都不需要关键字“var”的显示声明,函数的参数只能在函数内部访问。

二、对位传参法

  1. 形参与实参是通过位置而不是参数名来匹配对应的

  2. 形参与实参的个数可以不一致

  3. 如果一个形参没有接收到实参传递来的值,那么他为undefined

var x = 5, y = 6;
fn(x,y); 
function fn(a, b) {
  console.log(a + b);
}
// x,y实参,有具体的值。函数执行的时候会把x,y复制一份给函数内部的ab,函数内部的值是复制的新值,无法修改外部的x,y

三、对象传参法

当参数非常多时,想要不在通过位置来匹配参数,想让参数具有确定性,那么可以使用对象作为参数,然后就可以通过属性名key来匹配。

function fn(obj) {
    console.log(obj.name,obj.sex,obj.age)
}
 
var obj = {
name:'张飞',
sex:'男',
age:88
}
 
fn(obj) // 张飞 男 88

四、参数默认值

1、es5: 三目运算符,逻辑或运算符

三目运算符

function fn(a, b) {
    a = (a == undefined ? 0 : a);
    b = (b == undefined ? 1 : b);
    console.log(a, b)
}
fn()     //  0,1
fn(5,6)  //  5,6

逻辑或运算符

function fn(a,b) {
	a = a || 'aa';
	b = b || 'bb';
	console.log(a, b)
}
fn()    //aa bb
fn(5,6) //5 6

缺点:对于0.-0,null,"",undefined,NaN...逻辑运算结果全为false

2、es6:  在参数列表里面赋值

function fn(a = 0, b = 0) {
	console.log(a + b)
}
fn()     // 0
fn(5, 6) // 11

五、arguments

arguments代表了一个函数的所有参数,他是一个类似数组的东西,可通过下标取值。在我们不知道具体的参数个数时,他尤为有用。

他是一个类似数组的东西

20190526161758926.png

可以通过下标取值

arguments[0]就是第一个参数,arguments[1]就是第二个参数

20190526161837655.png

将arguments转换为一个数组

方法一:Array.prototype.slice.call(arguments)

可通过数组原型上得slice方法截取arguments中所有的内容,然后作为一个数组返回,如下:

20190526161937848.png

方法二:Array.from(arguments)

20190526161937848.png