【TypeScript系列教程11】函数的使用

举报
孙叫兽 发表于 2022/03/07 22:06:11 2022/03/07
【摘要】 目录 TypeScript 函数 函数定义 实例 实例 函数返回值 实例 带参数函数 实例 JavaScript 可选参数和默认参数 可选参数 默认参数 剩余参数 匿名函数 实例 匿名函数自调用 TypeScript 构造函数 实例 递归函数 实例 Lambda 函数 实例 实例 函...

目录

TypeScript 函数

函数定义

实例

实例

函数返回值

实例

带参数函数

实例

JavaScript

可选参数和默认参数

可选参数

默认参数

剩余参数

匿名函数

实例

匿名函数自调用

TypeScript

构造函数

实例

递归函数

实例

Lambda 函数

实例

实例

函数重载

实例


TypeScript 函数

函数是一组一起执行一个任务的语句。

您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。

函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。

函数定义

函数就是包裹在花括号中的代码块,前面使用了关键词 function:

语法格式如下所示:


  
  1. function function_name()
  2. {
  3. // 执行代码
  4. }

实例

TypeScript


  
  1. function () {
  2. // 函数定义
  3. console.log("调用函数")
  4. }

调用函数

函数只有通过调用才可以执行函数内的代码。

语法格式如下所示:

function_name()
 

实例

TypeScript


  
  1. function test() { // 函数定义
  2. console.log("调用函数")
  3. }
  4. test() // 调用函数

函数返回值

有时,我们会希望函数将执行的结果返回到调用它的地方。

通过使用 return 语句就可以实现。

在使用 return 语句时,函数会停止执行,并返回指定的值。

语法格式如下所示:


  
  1. function function_name():return_type {
  2. // 语句
  3. return value;
  4. }
  • return_type 是返回值的类型。
  • return 关键词后跟着要返回的结果。
  • 一个函数只能有一个 return 语句。
  • 返回值的类型需要与函数定义的返回类型 (return_type) 一致。

实例

TypeScript


  
  1. // 函数定义
  2. function greet():string { // 返回一个字符串
  3. return "Hello World"
  4. }
  5. function caller() {
  6. var msg = greet() // 调用 greet() 函数
  7. console.log(msg)
  8. }
  9. // 调用函数
  10. caller()
  • 实例中定义了函数 greet(),返回值的类型为 string。
  • greet() 函数通过 return 语句返回给调用它的地方,即变量 msg,之后输出该返回值。

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. // 函数定义
  2. function greet() {
  3. return "Hello World";
  4. }
  5. function caller() {
  6. var msg = greet(); // 调用 greet() 函数
  7. console.log(msg);
  8. }
  9. // 调用函数
  10. caller();

带参数函数

在调用函数时,您可以向其传递值,这些值被称为参数。

这些参数可以在函数中使用。

您可以向函数发送多个参数,每个参数使用逗号 , 分隔:

语法格式如下所示:


  
  1. function func_name( param1 [:datatype], param2 [:datatype]) {
  2. }
  • param1、param2 为参数名。
  • datatype 为参数类型。

实例

TypeScript


  
  1. function add(x: number, y: number): number {
  2. return x + y;
  3. }
  4. console.log(add(1,2))
  • 实例中定义了函数 add(),返回值的类型为 number。
  • add() 函数中定义了两个 number 类型的参数,函数内将两个参数相加并返回。

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. function add(x, y) {
  2. return x + y;
  3. }
  4. console.log(add(1, 2));

输出结果为:

3
 

可选参数和默认参数

可选参数

在 TypeScript 函数里,如果我们定义了参数,则我们必须传入这些参数,除非将这些参数设置为可选,可选参数使用问号标识 ?。

实例

TypeScript


  
  1. function buildName(firstName: string, lastName: string) {
  2. return firstName + " " + lastName;
  3. }
  4. let result1 = buildName("Bob"); // 错误,缺少参数
  5. let result2 = buildName("Bob", "Adams", "Sr."); // 错误,参数太多了
  6. let result3 = buildName("Bob", "Adams"); // 正确

以下实例,我么将 lastName 设置为可选参数:

TypeScript


  
  1. function buildName(firstName: string, lastName?: string) {
  2. if (lastName)
  3. return firstName + " " + lastName;
  4. else
  5. return firstName;
  6. }
  7. let result1 = buildName("Bob"); // 正确
  8. let result2 = buildName("Bob", "Adams", "Sr."); // 错误,参数太多了
  9. let result3 = buildName("Bob", "Adams"); // 正确

可选参数必须跟在必需参数后面。 如果上例我们想让 firstName 是可选的,lastName 必选,那么就要调整它们的位置,把 firstName 放在后面。

如果都是可选参数就没关系。

默认参数

我们也可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数,语法格式为:


  
  1. function function_name(param1[:type],param2[:type] = default_value) {
  2. }

注意:参数不能同时设置为可选和默认。

实例

以下实例函数的参数 rate 设置了默认值为 0.50,调用该函数时如果未传入参数则使用该默认值:

TypeScript


  
  1. function calculate_discount(price:number,rate:number = 0.50) {
  2. var discount = price * rate;
  3. console.log("计算结果: ",discount);
  4. }
  5. calculate_discount(1000)
  6. calculate_discount(1000,0.30)

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. function calculate_discount(price, rate) {
  2. if (rate === void 0) { rate = 0.50; }
  3. var discount = price * rate;
  4. console.log("计算结果: ", discount);
  5. }
  6. calculate_discount(1000);
  7. calculate_discount(1000, 0.30);

输出结果为:

  1. 计算结果: 500
  2. 计算结果: 300

剩余参数

有一种情况,我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义。

剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。

TypeScript


  
  1. function buildName(firstName: string, ...restOfName: string[]) {
  2. return firstName + " " + restOfName.join(" ");
  3. }
  4. let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

函数的最后一个命名参数 restOfName 以 … 为前缀,它将成为一个由剩余参数组成的数组,索引值从 0(包括)到 restOfName.length(不包括)。

TypeScript


  
  1. function addNumbers(...nums:number[]) {
  2. var i;
  3. var sum:number = 0;
  4. for(i = 0;i<nums.length;i++) {
  5. sum = sum + nums[i];
  6. }
  7. console.log("和为:",sum)
  8. }
  9. addNumbers(1,2,3)
  10. addNumbers(10,10,10,10,10)

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. function addNumbers() {
  2. var nums = [];
  3. for (var _i = 0; _i < arguments.length; _i++) {
  4. nums[_i] = arguments[_i];
  5. }
  6. var i;
  7. var sum = 0;
  8. for (i = 0; i < nums.length; i++) {
  9. sum = sum + nums[i];
  10. }
  11. console.log("和为:", sum);
  12. }
  13. addNumbers(1, 2, 3);
  14. addNumbers(10, 10, 10, 10, 10);

输出结果为:


  
  1. 和为: 6
  2. 和为: 50

匿名函数

匿名函数是一个没有函数名的函数。

匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。

我们可以将匿名函数赋值给一个变量,这种表达式就成为函数表达式。

语法格式如下:

var res = function( [arguments] ) { ... }
 

实例

不带参数匿名函数:

TypeScript


  
  1. var msg = function() {
  2. return "hello world";
  3. }
  4. console.log(msg())

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var msg = function () {
  2. return "hello world";
  3. };
  4. console.log(msg());

输出结果为:

hello world
 

带参数匿名函数:

TypeScript


  
  1. var res = function(a:number,b:number) {
  2. return a*b;
  3. };
  4. console.log(res(12,2))

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var res = function (a, b) {
  2. return a * b;
  3. };
  4. console.log(res(12, 2));

输出结果为:

24
 

匿名函数自调用

匿名函数自调用在函数后使用 () 即可:

TypeScript


  
  1. (function () {
  2. var x = "Hello!!";
  3. console.log(x)
  4. })()

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. (function () {
  2. var x = "Hello!!";
  3. console.log(x)
  4. })()

输出结果为:

Hello!!
 

构造函数

TypeScript 也支持使用 JavaScript 内置的构造函数 Function() 来定义函数:

语法格式如下:

var res = new Function( [arguments] ) { ... })
 

实例

TypeScript


  
  1. var myFunction = new Function("a", "b", "return a * b");
  2. var x = myFunction(4, 3);
  3. console.log(x);

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var myFunction = new Function("a", "b", "return a * b");
  2. var x = myFunction(4, 3);
  3. console.log(x);

输出结果为:

12
 

递归函数

递归函数即在函数内调用函数本身。

实例

TypeScript


  
  1. function factorial(number) {
  2. if (number <= 0) { // 停止执行
  3. return 1;
  4. } else {
  5. return (number * factorial(number - 1)); // 调用自身
  6. }
  7. };
  8. console.log(factorial(6)); // 输出 720

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. function factorial(number) {
  2. if (number <= 0) { // 停止执行
  3. return 1;
  4. }
  5. else {
  6. return (number * factorial(number - 1)); // 调用自身
  7. }
  8. }
  9. ;
  10. console.log(factorial(6)); // 输出 720

输出结果为:

720

Lambda 函数

Lambda 函数也称之为箭头函数。

箭头函数表达式的语法比函数表达式更短。

函数只有一行语句:

( [param1, parma2,…param n] )=>statement;
 

实例

以下实例声明了 lambda 表达式函数,函数返回两个数的和:

TypeScript


  
  1. var foo = (x:number)=>10 + x
  2. console.log(foo(100)) //输出结果为 110

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var foo = function (x) { return 10 + x; };
  2. console.log(foo(100)); //输出结果为 110

输出结果为:

110
 

函数是一个语句块:


  
  1. ( [param1, parma2,…param n] )=> {
  2. // 代码块
  3. }

实例

以下实例声明了 lambda 表达式函数,函数返回两个数的和:

TypeScript


  
  1. var foo = (x:number)=> {
  2. x = 10 + x
  3. console.log(x)
  4. }
  5. foo(100)

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var foo = function (x) {
  2. x = 10 + x;
  3. console.log(x);
  4. };
  5. foo(100);

输出结果为:

110
 

我们可以不指定函数的参数类型,通过函数内来推断参数类型:

TypeScript


  
  1. var func = (x)=> {
  2. if(typeof x=="number") {
  3. console.log(x+" 是一个数字")
  4. } else if(typeof x=="string") {
  5. console.log(x+" 是一个字符串")
  6. }
  7. }
  8. func(12)
  9. func("Tom")

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var func = function (x) {
  2. if (typeof x == "number") {
  3. console.log(x + " 是一个数字");
  4. }
  5. else if (typeof x == "string") {
  6. console.log(x + " 是一个字符串");
  7. }
  8. };
  9. func(12);
  10. func("Tom");

输出结果为:


  
  1. 12 是一个数字
  2. Tom 是一个字符串

单个参数 () 是可选的:

TypeScript


  
  1. var display = x => {
  2. console.log("输出为 "+x)
  3. }
  4. display(12)

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var display = function (x) {
  2. console.log("输出为 " + x);
  3. };
  4. display(12);

输出结果为:

输出为 12
 

无参数时可以设置空括号:

TypeScript


  
  1. var disp =()=> {
  2. console.log("Function invoked");
  3. }
  4. disp();

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. var disp = function () {
  2. console.log("调用函数");
  3. };
  4. disp();

输出结果为:

调用函数
 

函数重载

重载是方法名字相同,而参数不同,返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

参数类型不同:


  
  1. function disp(string):void;
  2. function disp(number):void;

参数数量不同:


  
  1. function disp(n1:number):void;
  2. function disp(x:number,y:number):void;

参数类型顺序不同:


  
  1. function disp(n1:number,s1:string):void;
  2. function disp(s:string,n:number):void;

如果参数类型不同,则参数类型应设置为 any

参数数量不同你可以将不同的参数设置为可选。

实例

以下实例定义了参数类型与参数数量不同:

TypeScript


  
  1. function disp(s1:string):void;
  2. function disp(n1:number,s1:string):void;
  3. function disp(x:any,y?:any):void {
  4. console.log(x);
  5. console.log(y);
  6. }
  7. disp("abc")
  8. disp(1,"xyz");

编译以上代码,得到以下 JavaScript 代码:

JavaScript


  
  1. function disp(x, y) {
  2. console.log(x);
  3. console.log(y);
  4. }
  5. disp("abc");
  6. disp(1, "xyz");

输出结果为:


  
  1. abc
  2. undefined
  3. 1
  4. xyz

文章来源: sunmenglei.blog.csdn.net,作者:孙叫兽,版权归原作者所有,如需转载,请联系作者。

原文链接:sunmenglei.blog.csdn.net/article/details/123318237

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。