函数

JavaScript

  1. 命名函数
  1. function say1(name){
  2. console.log(name)
  3. }
  1. 匿名函数
  1. let say2 = function (name){
  2. console.log(name)
  3. }
  1. 箭头函数
  1. let say1 = (name) => {
  2. console.log(name)
  3. }

TypeScript

  1. 命名函数
  1. function say1(name:string):void{
  2. console.log(name)
  3. }
  1. 匿名函数
  1. let say2 = function (name:string):void{
  2. console.log(name)
  3. }
  1. 箭头函数
  1. let say1 = (name:string):void => {
  2. console.log(name)
  3. }

函数声明和重载

1.TS函数完整格式

  • 在TS中函数的完整格式应该是由函数的定义和实现两个部分组成的
    • 定义一个函数:let AddFun:(a:number,b:number)=>number
    • 根据定义实现函数 AddFun = function (x:number,y:number):number{return x + y}
  1. // 根据函数的定义自动推导对应的数据类型
  2. let AddFun:(a:number,b:number)=>number =
  3. function (x,y){
  4. return x + y
  5. }

2.TS函数声明

  • 声明一个函数:
  1. // 先声明一个函数
  2. type AddFun = (a:number,b:number)=>number
  3. // 再根据声明去实现这个函数
  4. let add:AddFun = function (x,y) {
  5. return x + y
  6. }

3.TS函数重载

  • 函数的重载就是同名的函数可以根据不同的参数实现不同的功能
  1. // 定义函数重载
  2. function getArray(x:number):number[]
  3. function getArray(x:string):string[]
  4. // 实现函数重载
  5. function getArray(value:any):any[]{
  6. if(typeof value === 'sting'){
  7. return value.split('')
  8. }else{
  9. let arr = []
  10. for (let i = 0; i <= value; i++){
  11. arr.push(i)
  12. }
  13. return arr
  14. }
  15. }
  16. let res1 = getArray(3) // res1 = [0,1,2,3]
  17. let res2 = getArray('magic') // res2 = ['m','a','g','i','c']

可选-默认-剩余参数

1.可选参数

  1. // 定义一个函数实现2个数或者3个数相加
  2. function add(x:number,y:number,z?:number){
  3. return x + y + (z ? z : 0)
  4. }
  5. let res1 = add(10,20) // res1 = 30
  6. let res2 = add(10,20,30) // res2 = 60
  • 可选参数可以配合函数重载一起使用,这样可以让函数重载变得更加强大
  1. function add(x:number,y:number):number
  2. function add(x:number,y:number,z:number):number
  3. function add(x:number,y:number,z?:number){
  4. return x + y + (z ? z : 0)
  5. }
  • 可选参数后面只能跟可选参数
  1. function add(x:number,y?:number,z?:number){ // 不报错
  2. // function add(x:number,y?:number,z:number){ // 报错
  3. return x + (y ? y : 0) + (z ? z : 0)
  4. }

2.默认参数

  • 从ES6开始,可以直接在形参后面通过=指定默认值
  1. function getSum(a:number = 1, b:number = 2):number {
  2. console.log(a,b)
  3. }
  4. let res1 = getSum() // res1 = 3
  5. let res2 = getSum(10,20) // res2 = 30
  • ES6开始的默认值还可以从其他函数中获取
  1. function getSum(a:number, b:number = getDefault()):number {
  2. return a + b
  3. }
  4. let res1= getSum(1) // res1 = 3
  5. let res2 = getSum(10,20) // res2 = 30
  6. function getDefault():number {
  7. return 2
  8. }

3.剩余参数

  1. 扩展运算符在左边:将剩余数据打包到一个新的数组(注意:扩展运算符只能写在最后)
  1. let [a,...b] = [1,3,5];
  2. //a = 1;
  3. //b = [3,5];
  1. 扩展运算符在右边:将数组中数据解开
  1. let arr1 = [1,3,5]
  2. let arr2 = [2,4,6]
  3. let arr = [...arr1,...arr2]
  4. // arr = [1,3,5,2,4,6]
  1. 扩展运算符在函数的形参列表中:将传递给函数的所有实参打包到一个数组中(注意:扩展运算符只能写在最后)
  1. function getSum(...values:number):number{
  2. // values = [10,20]
  3. let sum = 0;
  4. for(let i = 0; i < values.length; i++){
  5. let num = values[i]
  6. sum += num
  7. }
  8. return sum
  9. }
  10. let res = getSum(10,20) // res = 30