函数
// 函数:封装了一些重复使用的代码,在需要的时候直接调用即可
(()=>{
// 1、js函数书写
// // 函数声明,命名函数
// function add (x,y){
// return x+y
// }
// // 函数表达式,匿名函数
// const add2 = function(x,y){
// return x+y
// }
// 2、ts函数书写
// 函数声明,命名函数
// ()中的内容代表xy的参数类型都是字符,小括号后的参数代表函数的返回值类型
function add (x:string,y:string):string{
return x+y
}
const result:string = add('111','222')
console.log(result);
// 函数表达式,匿名函数
// 函数中的x和y参数的类型都是number类型的,小括号后面的代表返回的为number类型
const add2 = function(x:number,y:number):number{
return x+y
}
console.log(add2(10,20));
// 函数完整的写法
// add3代表变量名
// (x:number,y:number)=>number 代表当前函数的类型
// function(x:number,y:number):number 符合这个函数类型的值
const add3:(x:number,y:number)=>number=function(x:number,y:number):number {
return x+y
}
console.log(add3(10,100));
})()
可选参数
// 可选参数:函数在声明的时候,使用 ? 进行修饰,该参数可传可不传
// 默认参数:函数在声明的时候,内部的参数有自己的默认值,及时默认参数
(()=>{
// 定义一个函数:传入姓氏和名字,可以得到姓名(姓名+名字=姓名)
// 需求:如果不传入任何内容,那么返回默认的姓氏
// 需求:如果只传入姓氏,那么就返回姓氏
// 需求:如果传入姓氏和名字,那么返回来的就是姓名
const getFullName = function(firstName:string='黄',lastName?:string):string{
if(lastName){
return firstName + '_' + lastName
}else{
return firstName
}
}
// 函数调用
// 什么也不传入
console.log(getFullName());
// 只传入姓氏
console.log(getFullName('诸葛'));
// 传入姓氏+姓名
console.log(getFullName('诸葛','亮'));
})()
剩余参数
// 剩余参数(rest参数)
(()=>{
// ...args:string[] ----> 剩余参数,放在一个字符串数组中
function showMsg(str:string,...args:string[]){
console.log(str);
console.log(args);
}
showMsg('a','b','c','d')
})()
函数重载
// 函数重载:函数名字相同,函数的参数及个数不同
// 我们有一个add函数,它可以接收2个string类型的参数进行拼接,也可以接收2个number类型的参数进行相加
(()=>{
// 函数重载声明
function add(x:string,y:string):string
function add(x:number,y:number):number
function add(x:string|number,y:string|number):string|number{
if(typeof x ==='string' && typeof y==='string'){
return x +y
} else if(typeof x === 'number' && typeof y === 'number'){
return x +y
}
// return x + y
}
// 参数类型一致
console.log(add('1','1'));
// 参数类型不一致,希望ts给我提示出错误
// console.log(add(1,'1'));
})()