一、概述
函数的参数分为形参和实参。
形参: 在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。
实参: 如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。
// 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部
// 带参数的函数声明
function 函数名(形参1, 形参2, 形参3...) {
// 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3);
形参1 = 实参1
形参2 = 实参2
形参3 = 实参3
...
复制代码
注意事项:
函数最终的运算结果由实参所解决定;
不论形参还是实参,都不需要关键字“var”的显示声明,函数的参数只能在函数内部访问。
二、对位传参法
-
形参与实参是通过位置而不是参数名来匹配对应的
-
形参与实参的个数可以不一致
-
如果一个形参没有接收到实参传递来的值,那么他为undefined
var x = 5, y = 6;
fn(x,y);
function fn(a, b) {
console.log(a + b);
}
// x,y实参,有具体的值。函数执行的时候会把x,y复制一份给函数内部的a和b,函数内部的值是复制的新值,无法修改外部的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代表了一个函数的所有参数,他是一个类似数组的东西,可通过下标取值。在我们不知道具体的参数个数时,他尤为有用。
他是一个类似数组的东西
可以通过下标取值
arguments[0]就是第一个参数,arguments[1]就是第二个参数
将arguments转换为一个数组
方法一:Array.prototype.slice.call(arguments)
可通过数组原型上得slice方法截取arguments中所有的内容,然后作为一个数组返回,如下:
方法二:Array.from(arguments)