banner
banner
banner
NEWS LETTER

TS-函数和this

Scroll down

函数

函数类型:创建有名字的函数和匿名函数

  • 具名函数:
    1
    2
    3
    function add(x,y) { 
    return x+y
    }
  • 匿名函数:
    1
    2
    3
    const add = function(x,y) { 
    return x+y
    }

完整的函数类型

  • 定义:(形参:参数类型) => 返回类型 = 函数(形参:参数类型):返回类型{}
  • 示例:
    1
    2
    let add: (x:number,y:number) => number 
    = function(x:number,y:number):number { return x+y }

推断类型: ts编译器会自动识别出类型

可选和默认参数

  • ts规定,『形参个数和传参个数要一致』
  • 『可选必须放在必选后面』,没传默认为undefined
  • 没传或传undefined时叫默认初始值。『带默认值的参数为可选,位置随意』
  • 『可选参数与末尾的默认参数共享参数类型』

剩余参数:个数不限的可选参数

1
2
3
function buildName(firstName: string, ...restOfName: string[]) {
return firstName + " " + restOfName.join(" ")
}

this

call方法

  1. 从参数1到末尾创建参数列表
  2. call方法的参数一是this值,其余的参数是调用函数的形参
    1
    2
    3
    4
    function hello(thing) {
    console.log(this + " says hello " + thing)
    }
    hello.call("Yehuda", "world") // Yehuda says hello world

this和箭头函数

  • 『在js中,顶级的非方法式调用会将this视为window』
  • 注意:『在严格模式下,this为undefined而不是window』
  • 解决方法:『使用箭头函数』,在函数被返回时就绑好正确的this,箭头函数能保存函数创建时的 this值,而不是调用时的值
  • ts中设置–noImplicitThis标记。它会指出里的this的类型

this参数:是假的参数

  • 形式:
    1
    function f(this: void) {}

回调函数里的this参数

  • 显式指定this类型,函数要带有this:void。但只能这个实例里的这个函数可用。
  • 用箭头函数,它不会捕获this,实例里的this都指向一个。但每个对象都会创建一次。

重载

  • 同一个函数提供多个函数类型定义来进行函数重载
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    let suits = ["hearts", "spades", "clubs", "diamonds"]
    // 接收对象数组,并返回数字类型
    function pickCard(x: {suit: string; card: number}[]): number
    // 接收数字,并返回一个对象类型
    function pickCard(x: number): {suit: string; card: number}
    function pickCard(x): any {
    // typeof检测非undefined,string,number,boolean之外,都只会返回object
    if (typeof x == "object") { // 传对象数组进入这个判断
    let pickedCard = Math.floor(Math.random() * x.length)
    return pickedCard
    } else if (typeof x == "number") { // 传数字进入这个判断
    let pickedSuit = Math.floor(x / 13)
    return { suit: suits[pickedSuit], card: x % 13 }
    }
    }

    let myDeck = [{
    suit: "diamonds", card: 2
    }, {
    suit: "spades", card: 10
    }, {
    suit: "hearts", card: 4}] // 定义一组数据
    let pickedCard1 = myDeck[pickCard(myDeck)] // 传值
    let pickedCard2 = pickCard(15)
其他文章
cover
TS-泛型 <>
  • 24/11/01
  • 11:40
  • TypeScript
cover
TS-模块解析
  • 24/11/01
  • 11:40
  • TypeScript
目录导航 置顶
  1. 1. 函数
    1. 1.1. 函数类型:创建有名字的函数和匿名函数
    2. 1.2. 完整的函数类型
    3. 1.3. 推断类型: ts编译器会自动识别出类型
    4. 1.4. 可选和默认参数
    5. 1.5. 剩余参数:个数不限的可选参数
  2. 2. this
    1. 2.1. call方法
    2. 2.2. this和箭头函数
    3. 2.3. this参数:是假的参数
    4. 2.4. 回调函数里的this参数
    5. 2.5. 重载
请输入关键词进行搜索