可选参数:
可选参数的格式可为name?: Type。
可选参数的另一种形式为设置的参数默认值。如果在函数调用中这个参数被省略了,则会使用此参数的默认值作为实参。
function getAge(sex:string,name?:string,){
//有值真
if(name){
return `${name} ${sex}`;
}
return `无名${sex}`;
}
//b默认值是3
function add(a:number,b:number=3){
return a+b;
}
let a1= add(2,6);
let a22= add(2);
rest参数:
函数的最后一个参数可以是rest参数。使用rest参数时,允许函数或方法接受任意数量的实参。
function ages(name:string,...ages:number[]){
console.log(`${name}班有${ages.length}`)
let sum=0;
for (let el of ages) {
sum+=el
}
console.log(`年龄总和:${sum},平均值${sum/ages.length}`)
return sum/ages.length
}
let avgAge= ages('鸿蒙',12,13,18,21,17,19)
function vo():void{
// return 1;不能同时存在
}
let ab1=10;
function ab(){
let ab1=11;
return ab1+10;
}
返回类型
如果可以从函数体内推断出函数返回类型,则可在函数声明中省略标注返回类型不需要返回值的函数的返回类型可以显式指定为void或省略标注。这类函数不需要返回语句。
type fc=(str:string)=>string //对字符串进行处理并返回
function syfc(f:fc) {
//cl('小明')
}
function cl(str:string){
return str+"不是人"
}
let str33=syfc(cl)
函数的作用域
函数中定义的变量和其他实例仅可以在函数内部访问,不能从外部访问。 如果函数中定义的变量与外部作用域中已有实例同名,则函数内的局部变量定义将覆盖外部定义。
函数调用
调用函数以执行其函数体,实参值会赋值给函数的形参。
函数类型
函数类型通常用于定义回调:
箭头函数(又名Lambda函数) 函数可以定义为箭头函数,例如:
function lam(x:number,y:number){
return x+y
}
lam(1,2)
let lam1=(x:number,y:number)=>{return x+y}
lam1(1,2)
let lam2=(x:number,y:number)=>{x+y}
let lam3=(x:number,y:number)=>x+y
箭头函数的返回类型可以省略;省略时,返回类型通过函数体推断。 表达式可以指定为箭头函数,使表达更简短,因此以下两种表达方式是等价的:
//{}省略,必须只有一行代码,不能写return关键字
//()不能省略
let lam5=(x:number,y:number)=>x+y
function ab4(){
let a=0
return a++;
}
let ab5=ab4()
let ab6=ab4()
闭包 闭
包是由函数及声明该函数的环境组合而成的。该环境包含了这个闭包创建时作用域内的任何局部变量。 在下例中,f函数返回了一个闭包,它捕获了count变量,每次调用z,count的值会被保留并递增。
function abc5():()=>number{
let a=0
let g=():number=>{return a++}
return g;
}
let abc6=abc5()
abc6()