【函数】封装了一些重复使用的代码,在需要的时候直接调用。
【命名函数】
//1.Js
function add1(x, y) {
return x + y
}
//2.Ts
function add2(x:number, y:number):number{return x + y }
【匿名函数】
//函数表达式
//1.Js
let myAdd = function(x, y) {
return x + y;
}
//2.TS
let myAdd=function(x:number, y:number):number{return x + y }
【匿名函数自调用】
(function () {
var x = "Hello!!";
console.log(x)
})()
//或者采用箭头函数表现形式
(()=>{
xxxx
})()
【函数的完整写法】
// sum2---变量名
// (x: number, y: number) => number当前这个函数的类型
// function (x: number, y: number): number { return x + y }符合上面函数类型的值
const sum2: (x: number, y: number) => number = function (x: number, y: number): number {
return x + y
}
console.log(sum2(1, 2))
【构造函数】var res = new Function ([arg1[, arg2[, ...argN]],] functionBody)
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
console.log(x); //12
【递归函数】递归函数即在函数内调用函数本身。
【Lambda 函数】Lambda 函数也称之为箭头函数。箭头函数表达式的语法比函数表达式更短。
(1)函数只有一行语句:( [param1, parma2,…param n] )=>statement;
var foo = (x:number)=>1 + x
console.log(foo(20)) //21
(2)函数是一个语句块:( [param1, parma2,…param n] )=> { // 代码块 }
var foo = (x:number)=> {
x = 1 + x
console.log(x)
}
foo(20) //21
注意:单个参数 () 是可选的: var foo=x=>{};无参数时可以设置空括号:var foo=()=>{}
【默认参数、可选参数、剩余参数】
默认参数:函数声明时,内部的参数有自己的默认值
可选参数:函数在声明时,内部的参数使用?进行修饰
剩余参数:声明时放在所有参数的最后
const getInfo = function (name: string = "Lisa", hobby?: string, ...args: string[]): string {
if (hobby) {
return name + "喜欢" + hobby+args
} else {
return name+args
}
}
console.log(getInfo()) //Lisa
console.log(getInfo("聪聪","","a","b","c")) //聪聪,a,b,c
console.log(getInfo("大熊", "跑步","a","b","c")) //大熊喜欢跑步,a,b,c
【函数重载】函数方法名相同, 而参数(参数类型,参数数量,参数类型顺序)不同,返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。在JS中, 由于弱类型的特点和形参与实参可以不匹配,,是没有函数重载这一说法的, 但在TS中, 与其它面向对象的语言(如Java)就存在此语法。
/*
函数重载: 函数名相同, 而形参不同的多个函数
需求: 我们有一个add函数,它可以接收2个string类型的参数进行拼接,也可以接收2个number类型的参数进行相加
*/
// 函数重载声明
function add(x: string, y: string): string
function add(x: number, y: number): number
// 定义一个add函数,可以接收2个string类型的参数进行拼接,也可以接收2个number类型的参数进行相加
function add(x: string | number, y: string | number): string | number {
// return x + y // console.log(name)
// 进行类型判断
if (typeof x === 'string' && typeof y === 'string') {
return x + y
} else if (typeof x === 'number' && typeof y === 'number') {
return x + y
} else {
return -1
}
}
console.log(add("小明", "开心")) //小明开心
console.log(add(1, 2)) //3
// 函数重载作用---传入非法值,ts给出错误提示信息
// console.log(add(1, "鲜美"))