JavaScript函数
JavaScript的函数本质上属于object
类型
定义函数
主要用如下两种方式:
// 第一种
function 函数名 ([形参列表]) {
函数体
}
// 第二种,下面的变量名可以当成函数名来使用,此时=后面的是一个匿名函数
var 变量名 = function ([形参列表]) {
函数体
};
函数调用
语法如下:
函数名([实参列表]);
注意,当实参和形参个数不相等时,分为以下两种情况
- 实参>形参,则多余的实参会被忽略
- 形参>实参,则缺少的形参默认为
undefined
例如:
function sum(a, b) {
return a + b;
}
console.log(sum(1)); // NaN,此时函数中的b是undefined
console.log(sum(2, 4, 8)); // 6
arguments对象
在每一个函数中都会有一个arguments
对象,其保存调用该函数时的有关信息,其中最重要的是实参,第一个实参的key是0,第一个实参的key是1,以此类推,多余的实参也会保存,arguments.length
表示实参个数。
例如:
function sum(a, b) {
let result = 0
for (let i = 0; i < arguments.length; i++) {
result += arguments[i];
}
return result;
}
console.log(sum(1)); // 1
console.log(sum(2, 4, 8)); // 14
其还有一个属性callee
,指向函数自身,常用于递归,这样当修改函数名时,函数内的函数名不用修改,比较方便,例如:
// 求阶乘
function fact (n) {
if (n === 1)
return 1;
return n * arguments.callee(n - 1);
}
console.log(fact(4)); // 24
立即执行函数表达式IIFE
语法如下:
(函数)(实参);
IIFE
会立即将实参带入函数里执行,而不需要去手动调用函数,且无法在别的地方调用,因此第一个括号里的函数通常是匿名函数,一般用于JS库、JS插件的封装或闭包处理。
注意:尽管IIFE
通常写成多行,但它是一个表达式,所以最好在最后加上分号,且上一句也要用分号结尾,否则会合并上一句一块执行。
例如:
var x = (function (a, b) {
return a + b;
})(1, 2);
console.log(x);
默认值
在定义函数时,可以给定形参默认值,例如:
function sum(a, b = 10) {
return a + b;
}
console.log(sum(10)); // 20
console.log(sum(1, 100)); // 101