函数格式
// 格式一
function 函数名(参数列表): 返回值类型 {
函数体 ...
[return 返回值;]
}
//格式二
let 函数名 = function (参数列表): 返回值类型 {
函数体 ...
[return 返回值;]
};
函数参数
必选参数
参数列表里边的参数就是必选参数,只要在声明的时候写了参数,在传递的时候,就必须传入参数,而且,实参与形参的数量与类型要一致。
function fn(name: string, age: number): string {
return `${name} --- ${age}`;
}
console.log(fn("张三", 28)); // 正确
console.log(fn("张三")); // 错误
console.log(fn(28)); // 错误
可选参数
解决在函数传参的时候,某些参数可以不用传递,我们就需要可选参数了。
可选参数必须配置到参数的最后面。
function fn(name: string, age?: number): string {
return `${name} --- ${age}`;
}
console.log(fn("张三", 28)); // 正确
console.log(fn("张三")); // 正确
console.log(fn(28)); // 错误
默认参数
为了解决在函数传参的时候,某些参数可以不用传递,但又需要该参数的值,这时候我们就需要给这个参数设定一个默认值也叫初始化值,就得用到默认参数了。
可选参数不能够进行初始化值的设定。
function fn(name: string, age: number = 20): string {
return `${name} --- ${age}`;
}
console.log(fn("张三", 28)); // 正确
console.log(fn("张三")); // 正确
console.log(fn(28)); // 错误
剩余参数
在参数的类型确定而参数个数不确定的情况时,我们需要用到剩余参数,它使用
...
将接收到的参数传到一个指定类型的数组中。
剩余参数必须配置到参数的最后面。
//格式一
function sum(...result: number[]): number {
let sum = 0;
for (let i = 0; i < result.length; i++) {
sum += result[i];
}
return sum;
}
console.log(sum(1, 2, 3, 4, 5, 6));
//格式二
function sum(init: number, ...result: number[]): number {
let sum = init;
for (let i = 0; i < result.length; i++) {
sum += result[i];
}
return sum;
}
console.log(sum(100, 1, 2, 3, 4, 5, 6));
函数重载
函数名称相同,但是参数的个数或者类型不同。
优势:
1.结构分明
2.各司其职,自动提示方法和属性
3.更利于功能拓展
// 函数的定义
function add(num1: number, num2: number): number;
function add(num1: string, num2: string): string;
// 函数的实现
function add(num1: any, num2: any): any {
return num1 + num2;
}
function fn(type: number): number // 根据ID查询记录
function fn(type: string): string // 根据类型查询记录
function fn(type: any ): any {
if(typeof type === "number") {
//return ...
} else {
//return ...
}
}
箭头函数
setTimeout(function () {
console.log("匿名函数执行了...");
}, 1000);
setTimeout(() => {
console.log("箭头函数执行了...");
}, 1000);