//格式:
/*function 函数名称([形参, ...]) //{[形参, ...]并不是一个数组参数,而是这个参数可以写也可以不写(即函数可以有参数,也可以没有参数)
//代码段
return 返回值;
}*/
//定义:
function fnDefineFunn(arg1, arg2) {
console.log("function语句---------------------");
return arg1 + arg2;
}
fnDefineFunn(1, 2);
2、函数直接量:
//格式:
/*var 函数名称 = function([形参, ...]) {
//代码段
return 返回值;
};*/
//定义:
var fnDefineFunn = function(arg1, arg2) {
console.log("函数直接量---------------------");
return arg1 + arg2;
};
fnDefineFunn(3, 4);
3、 Function构造函数:
//格式:
//var 函数名称 = new Function("形参1", "形参2", "代码段;return 返回值;");
//定义:
var fnDefineFunn =
new Function("arg1", "arg2", "console.log('构造函数---------------------'); return arg1+arg2;");
console.log(fnDefineFunn(1, 2));
使用须知:
- 函数名严格区分大小写,如果重复了,后面的会覆盖前面的(并且与形参个数无关)
- 形参只要指定名称即可,可以没有,可以有多个
- 函数可以有返回值,也可以没有,没有时返回的是undefined
- 如果不调用函数,函数体不会执行
你应该理解:
//区别形参和实参
//形参:定义函数时()中指定的参数,本质是变量
//实参:调用函数时()中指定的参数,本质是数据
//实参个数可以和形参个数不同
//1. 如果实参多了,后面多的实参会被忽略
//2. 如果实参少了,后面多的形参会被赋值为undefined
//实参与形参个数不同:
function fnInvokeFunn(arg1, arg2) {
return arg1 + arg2;
}
console.log(fnInvokeFunn(3));//NaN, 多的形参被赋值为undefined, 所以 3+undefined = NaN
console.log(fnInvokeFunn(3, 4));//7
console.log(fnInvokeFunn(3, 4, 5));//7, 忽略多的实参
思考:实参个数可以和形参个数不同,这有什么用?
需求:我想求若干个数的和,这个若干可以是2个数,3个数......,怎么做?
//先上代码:
function fnSum() {
console.log(arguments);
var sum = 0;
for(var i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
console.log(fnSum(1)); //1
console.log(fnSum(1, 2)); //3
console.log(fnSum(1, 2, 3)); //6
arguments:
怎样理解arguments?
是什么?what
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。(W3School)
为什么用?why
用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载:(W3School)
怎么用?how
还可以用 arguments 对象检测函数的参数(指的是实参)个数,引用属性 arguments.length 即可(W3School)
arguments本质:
arguments可以看作是由实参组成的数组(伪数组),数组中的元素就是你传入的一个个实参。
然而arguments并不是一个真正的数组, 并不能像操作数组一样操作arguments(没有数组该有的方法push、pop...)。
使用方式:
1. arguments可以像数组一样有length属性,值为数组元素的个数,即传入实参的个数
2. arguments可以像数组一样通过[下标]获取元素,下标区间为[0, arguments.length-1],即0到数组长度-1。