TypeScript笔记【4】函数(function)

一、JS的函数

编程语言总少不了函数的。我们先来回顾一下JS中的函数。

// “普通”模样的函数
function add(a, b) {
    return a + b;
}

// 用变量保存函数
var procAdd = function (a, b) {
    return a + b;
}


二、TS的函数

TS的函数与JS类似,只不过多了参数类型和返回值类型:

function 函数名(参数列表): 返回值类型 {
    函数体
}

其中,参数列表的格式为:

参数1: 类型1, 参数2: 类型2, ..., 参数n: 类型n

将前面的JS版的add函数和procAdd函数改写成TS版,则是:

function add(a: number, b: number): number {
    return a + b;
}

var procAdd: (a: number, b: number) => number = function (a: number, b: number): number {
    return a + b;
}

procAdd的定义有些长,其实,它就是我们在【1】中讲过的【var 变量名: 类型 = 值;】,(a: number, b: number) => number就是procAdd的类型。

当然,省略procAdd的类型也是可以的,TS可以自动推断出它的类型。

var procAdd = function (a: number, b: number): number {
    return a + b;
}

如果完整地指定了procAdd的类型,则后面的定义部分可以省略参数的类型:

var procAdd: (a: number, b: number) => number = function (a, b): number {
    return a + b;
}

TS通过procAdd的声明可以准确推断出a、b的类型是number。


三、可选参数与默认参数

3.1 可选参数

我们来看一个来自官网的例子:

function buildName(firstName: string, lastName?: string): string {
    if (lastName) {
        return firstName + " " + lastName;
    } else {
        return firstName;
    }
}

参数名的后面加问号【?】,表示这个参数是可选的(即,调用函数时可以不提供这个参数)。例如,我可以只提供一个firstName:

var r1 = buildName("Jim"); // 正确

当然,也可以两个参数都提供:

var r2 = buildName("Jim", "Raynor"); // 正确

3.2 默认参数

有的时候,我们需要默认的参数。例如,构建一个复数需要两个实数作为实部和虚部,如果不提供虚部,则认为虚部为零。

class Complex {
// 代码
}

function buildComplex(a: number, b: number = 0): Complex {
// 代码
}

参数b的默认值为零,即buildComplex(a)相当于buildComplex(a, 0)。


四、其他话题

关于TS的函数,还有至少三个话题:

  1. 不定参数(参数的个数不固定,类似于C的printf);

  2. Lambda表达式与this;

  3. 重载(类似于C++的重载)。

这些话题我近期会和大家讨论。

你可能感兴趣的:(JavaScript,function,函数,前端,TypeScript)