Skip to content

函数(function)

函数是一段可重复使用的代码块,可以接受输入参数,并在执行时执行特定的任务或返回特定的结果。函数可以在程序中被调用,并可以带有返回值。函数除了可以执行特定的任务和返回结果,还可以在执行过程中修改外部变量的值、调用其他函数、处理异常等等。函数是模块化编程的基本单元,可以帮助我们组织和重用代码,并提高代码的可读性和可维护性。
在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方。 TypeScript为JavaScript函数添加了额外的功能,让我们可以更容易地使用。

函数的定义

使用function关键字来定义函数。以下是一个函数的示例:

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

console.log(add(5, 3)); // 输出:8

在上面的示例中,我们定义了一个名为add的函数,它接受两个参数a和b,并返回它们的和。函数的返回类型被指定为number,因为我们知道a和b都是数字,并且函数的返回值也是一个数字。
通过console.log(add(5, 3));,我们调用了add函数,并传递了参数5和3。函数执行后,返回结果8,并通过console.log()函数打印到控制台。

函数的参数数据类型

我们可以给每个参数添加类型之后再为函数本身添加返回值类型。 TypeScript能够根据返回语句自动推断出返回值类型,因此我们通常省略它。

ts
function add(x: number, y: number): number {
    return x + y;
}

let myAdd = function(x: number, y: number): number { return x + y; };

书写函数的完整数据类型十分重要现在我们已经为函数指定了类型,下面让我们写出函数的完整类型。

ts
let myAdd: (x:number, y:number) => number =
    function(x: number, y: number): number { return x + y; };

函数类型包含两部分:参数类型和返回值类型。 当写出完整函数类型的时候,这两部分都是需要的。 我们以参数列表的形式写出参数类型,为每个参数指定一个名字和类型。 这个名字只是为了增加可读性。 我们也可以这么写:

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

只要参数类型是匹配的,那么就认为它是有效的函数类型,而不在乎参数名是否正确。

第二部分是返回值类型。 对于返回值,我们在函数和返回值类型之前使用(=>)符号,使之清晰明了。 如之前提到的,返回值类型是函数类型的必要部分,如果函数没有返回任何值,你也必须指定返回值类型为void而不能留空。

函数的类型只是由参数类型和返回值组成的。 函数中使用的捕获变量不会体现在类型里。 实际上,这些变量是函数的隐藏状态并不是组成API的一部分。

可选参数

在函数定义中,我们可以指定参数的类型和名称。参数可以是可选的,也可以有默认值。我们定义了一个名为add的函数,它接受两个参数a和b,b是可选的。如果b没有传递值,则默认值为0。以下是一些示例:

ts
function add(a: number, b?: number): number {
  return a + (b || 0);
}
console.log(add(5)); // 输出:5

默认参数

在函数定义中,我们可以指定参数的类型和名称。参数可以是可选的,也可以有默认值。我们定义了一个名为add的函数,它接受两个参数a和b,b是可选的。如果b没有传递值,则默认值为0。以下是一些示例:

ts
function add(a: number, b: number = 0): number {
  return a + b;
}
console.log(add(5)); // 输出:5

在上面的示例中,我们定义了一个名为add的函数,它接受两个参数a和b,b是可选的。如果b没有传递值,则默认值为0。
与普通可选参数不同的是,带默认值的参数不需要放在必须参数的后面。 如果带默认值的参数出现在必须参数前面,用户必须明确的传入undefined值来获得默认值。 例如,我们重写最后一个例子,让firstName是带默认值的参数:

剩余参数

在函数定义中,我们可以指定参数的类型和名称。参数可以是可选的,也可以有默认值。我们定义了一个名为add的函数,它接受两个参数a和b,b是可选的。如果b没有传递值,则默认值为0。以下是一些示例:

ts
function buildName(firstName: string, ...restOfName: string[]) {
  return firstName + " " + restOfName.join(" ");
}

let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

剩余参数会被当做个数不限的可选参数。 可以一个都没有,同样也可以有任意个。 编译器创建参数数组,名字是你在省略号(...)后面给定的名字,你可以在函数体内使用这个数组。

仅用于培训和测试,通过使用本站代码内容随之而来的风险与本站无关。版权所有,未经授权请勿转载,保留一切权利。
ICP备案号:滇ICP备15009214号-13   公安网备:滇公网安备 53312302000061号