Typescript入门__5__函数

136 阅读2分钟

1、介绍

函数是Javascript应用程序的基础。

2、 函数

和Javascript一样,Typescript可以创建有名函数和匿名函数。

// 函数声明式(具名函数)
function add(x,y){ 
   return x+y;
}// 函数表达式(匿名函数)
let add = function(x,y){return x+y;}

3、函数类型


1、为函数定义类型

// number 类型
function add(x:number,y:number):number{  
   return x+y;
}
add(1,2);// 3
2、书写完整函数类型

// 对比函数
let add:number = function(x:number,y:number):number{
    return x+y;
}
函数类型包括两部分:参数类型和返回值类型。
完整函数类型两者都是需要的。

// 完整函数类型
let add:(baseValue:number,increment:number) = function(x:number,y:number):number{   
 return x+y;
}
3、推断函数类型

如果你在赋值语句的一边指定了类型但是另一边没有类型的话,
TypeScript编译器会自动识别出类型。

let add:number = function(x:number,y:number):number{  
  return x+y;
}
let add:(baseValue:number,increment:number) = function(x:number,y:number):number{    
return x+y;
}

4、可选参数和默认参数

Typescript里的每一个参数都是必须的。传递的参数和期望的参数个数必须一致

// 正常情况
function add(a:number,b:number,c:number):number{ 
   return a+b+c;
}
add(1,2);// 错误,参数少了
add(12,312,3,211);// 错误,参数多了
add(1,2,3);// 6// 可选参数,参数c可选填
function add(a:number,b:number,c?:number):number{  
  if(!c){    
  return a+b;
    } 
   return a+b+c;
}// 默认参数
function add(a:number,b:number=3):number{ 
   return a+b;
}
add(1);//4
add(1,2);//3
add(1,undefined);//4

5、剩余参数

非必要参数,默认参数和可选参数都表示某个参数
剩余参数表示传过来的未知个数的参数

function add(...rest:number):number{ 
   var s = 0; 
   rest.map(function(item){    
    s+=item;  
  })  
  return s;
}
add(1,2,3);// 
6add(1);//1

6、this

1、this和箭头函数

在javascript中,this的值在函数被调用的时候才会指定。

let person = {  
    name:"wudikeji",   
   age: 32,   
   say:function(){  
        return function(){   
           console.log(this.name+","+this.age);    
          console.log(this)    
      }   
   }
  } 
 let say = person.say(); 
 say();   // undefined   // window
 我们在全局作用域下调用了person的方法say(),此时this已经指向了window(严格模式下是undefined)
2、this参数

let person = {   
   name:"wudikeji",   
   age: 32,  
    say:function(){   
       let _this = this; 
         return function(_this){  
            console.log(_this.name+","+_this.age);    
          console.log(_this)      
    }   
   } 
 } 
 let say = person.say();  
say(person); 
 // wudikeji,32 
 // {name: "wudikeji", age: 32, say: ƒ}