1. 函数介绍
将实现一个功能的代码片段封装成一个整体,该整体可称为函数。
1.1 函数声明方式
- 直接声明
funcition 函数名称(参数列表) {
函数体
}
function add(a, b) {
return a + b;
}
- 匿名函数表达式(函数字面量)
var fun = function (参数列表) {
函数体
}
var fun = function (a, b) {
return a + b;
}
1.2 实参、形参及其映射
- 实参:调用函数传递的值
- 形参:函数的参数列表
function add(a, b) { // a, b 为形参
console.log(a, b);
}
add(1, 2); // 1, 2为实参
- *映射
形参和实参存在一对一的关系,实参的第一个值对应第一个形参,当实参没有传值时,形参为undefined
function add(a, b) {
console.log('a='+a, 'b='+b);
}
add(1, 2); // a=1 b=2
add(1); // a=1 b=undefined
在JS中,有一个全局属性arguemnts,它能获取所有的实参值,以数组的形式保存实参。
function add() {
console.log(arguments);
}
add(1, 2); // [1, 2]
1.3 参数默认值
当形参设置了默认值后,实参数为undefined时,形参值为默认值
function test(a = 1) {
console.log(a);
}
test(''); // 空字符串
test(0); // 0
test(null); // null
test(undefined); // 1
当函数体修改了形参值或者使用arguments修改了值,则形参值被修改
function test(a) {
arguments[0] = 9;
console.log(a, arguments[0]); // 9 9
a = 7;
console.log(a, arguments[0]); // 7 7
}
test(1);
1.4 函数名和参数长度
通过name属性可获取函数名。
- 直接声明函数的函数名为function后的名称
- 通过函数字面量声明,如果function后没有名称,则函数名为变量名,如果function后有值,则为function后的值
function test() {}
var fun = function (){}
var fun1 = function add(){}
console.log(test.name); // test
console.log(fun.name); // fun
console.log(fun1.name); // add
参数长度通过length属性获取
- 函数名.length:获取形参的个数
- arguments.length:获取实参的个数
function test(a) {
console.log('形参个数:'+test.length);
console.log('实参个数:'+arguments.length)
}
test(1, 2, 3); // 形参个数:1 实参个数:3
1.5 参数传递方式
参数传递有两种,分别是值传递和引用传递。 值传递可以理解成将具体的值作为给形参赋值,引用传递则是将存放值的地址传给形参,会改变原先的值。
// 值传递
function add1(a, b) {
a = a + b;
console.log(a);
}
var a = 1, b = 2;
console.log(a); // 1
add1(a, b); // 3
console.log(a); // 1
// 引用传递
function add2(numObj) {
numObj.a = numObj.a + numObj.b;
console.log(numObj.a);
}
var obj = {a: 1, b:2};
console.log(obj.a); // 1
add2(obj); // 3
console.log(obj.a); // 3