1. 函数概述

需求:计算数组nums中所有元素的和。

let nums: number[] = [1, 3, 5]let sum: number = 0
for (let i: number = 0; i < nums.length; i++) {sum += nums[i]
}
console.log(sum)

问题:如果还要计算其他数组(nums2)中所有元素的和呢? 拷贝一份代码,修改

let nums2: number[] = [2, 4, 6]

存在的问题:相似的代码重复写,代码冗余。

正确的姿势:使用函数包装(封装)相似的代码,在需要的时候调用函数,相似的代码不再重复写。

function getSum(nums: number[]) {let sum: number = 0for (let i: number = 0; i < nums.length; i++) {sum += nums[i]}console.log(sum)
}getSum(nums1) // 计算nums1中所有元素的和
getSum(nums2) // 计算nums2中所有元素的和

所谓函数,就是声明一次但却可以调用任意多次的一段代码

意义:实现代码复用,提升开发效率。

封装:将一段代码包装起来,隐藏细节。

2. 函数使用

函数的使用分为两步:1 声明函数 2 调用函数 (类比变量)。

  • 第一步:声明函数

    function 函数名称() {函数体
    }
    

    解释:
    函数名称:推荐以动词开头,因为函数表示做一件事情,实现一个功能。
    函数体:表示要实现功能的代码,复用的代码。

  • 第二步:调用函数

    函数名称()
    

    比如,调用 sing 函数:

    sing()
    

    注意:只有调用函数后,函数中的代码才会执行。

总结:

  1. 函数的基本使用分为哪两步? 1 声明函数 2 调用函数

  2. 声明函数的关键字是什么? function

  3. 不调用函数,函数中的代码会执行吗?不会

// 1 声明函数
function sing() {console.log('五环之歌')
}
// 2 调用函数
sing()

3. 函数参数

3.1 概述

需求:让唱歌的函数(sing),每次调用时,“唱”不同的歌。

function sing() {console.log('五环之歌')
}
sing() // 五环之歌
sing() // 五环之歌

原因:函数(sing)中歌曲名称是固定值。

存在的问题:函数(sing)只能“唱”固定的歌,太死板,没有体现出函数复用的灵活性。

使用函数参数来实现:

// 调用函数时,告诉函数要唱的歌曲名称
sing('五环之歌')
sing('探清水河')
// 声明函数时,接收传入的歌曲名称
function sing(songName: string) {console.log(songName)
}

函数(sing)中歌曲名称:固定值 → 动态传入的值。

函数参数的作用:增加了函数的灵活性通用性,针对相同的功能,能够适应更多的数据(值)。

3.2 形参和实参

函数参数分为两部分:1 形参 2 实参。

  1. 形参:声明函数时指定的参数,放在声明函数的小括号中(挖坑)。

    function sing(songName: string) { }
    

     语法:形参名称: 类型注解,类似于变量声明,但是没有赋值。
     作用:指定函数可接收的数据。
    然后,就可以在函数体中,像使用变量一样使用形参了。

  2. 实参:调用函数时传入的参数,放在调用函数的小括号中(填坑)。

    sing('五环之歌')
    

     实参是一个具体的值(比如:‘字符串’、18、[]等),用来赋值给形参。

形参和实参的总结:

  • 声明函数时的参数,叫什么?作用?
    形参,指定函数能够接收什么数据。

    function sing(songName: string) { }
    
  • 调用函数时的参数,叫什么?作用?
    实参,是一个具体的值,用来赋值给形参。

    sing('五环之歌')
    

通过形参和实参的配合,函数可以接收动态数据,从而让函数变得更加灵活、强大。

3.3 其他说明

  1. 根据具体的功能,函数参数可以有多个,参数之间使用逗号(,)来分隔。

    function fn(name: string, age: number) { }
    fn('刘老师', 18)
    
  2. 实参和形参按照顺序,一一对应。

    function fn(name: string, age: number) { }
    fn('刘老师', 18) // name -> '刘老师', age -> 18
    
  3. 实参必须符合形参的类型要求,否则会报错!

    function sing(songName: string) {}
    sing(18) // 报错! 形参要求是 string 类型,但是,实参是 number 类型。
    

技巧:调用函数时,鼠标放在函数名称上,会显示该函数的参数以及类型。

总结:

  • 函数形参是 string 类型,调用该函数时传入 18 对吗? 不对,因为实参不符合形参的类型要求逗号

  • 函数有多个参数时,多个参数之间用什么符号分隔?

  • 以下代码会报错吗?

    function sing(songName: string) { }
    sing()// 报错!
    

    报错!因为函数sing要求有一个参数,但是没有传

4. 函数返回值

4.1 概述

函数返回值的作用:将函数内部计算的结果返回,以便于使用该结果继续参与其他的计算。

需求:计算以下两次调用结果的和。

getSum([1, 3, 5]) // 9
getSum([10, 100, 1000]) // 1110
getSum([1, 3, 5]) + getSum([10, 100, 1000]) // 9 + 1110 => 1119

关键点:拿到函数(getSum)内部计算出来的结果,然后,才能进行后续的加法计算。

注意:如果没有指定函数的返回值,那么,函数返回值的默认类型为 void(空,什么都没有)。

4.2 基本使用

步骤:1 指定返回值类型 2 指定返回值

  1. 指定返回值类型

    function fn(): 类型注解 {}
    

    在声明函数的小括号后面,通过 : 类型注解 指定。

    function fn(): number {}
    
  2. 指定返回值

    function fn(): 类型注解 {return 返回值
    }
    

    在函数体中,使用 return 关键字来返回函数执行的结果。

    function fn(): number {return 18
    }
    

    注意:返回值必须符合返回值类型的类型要求,否则会报错!

  3. 使用变量接收函数返回值

    let result: 类型注解 = fn()
    

    使用变量接收函数返回值的时候,相当于:直接将返回值赋值给变量。

    let result: number = 18
    

    注意:变量(result)的类型与函数(fn)的返回值类型要一致。

    然后,就可以使用这个变量(返回值),继续进行其他计算了。

  4. 直接使用函数调用的结果(返回值),进行其他计算

    console.log( fn() * 10 )
    

总结:

  • 使用哪个关键字来指定返回值?return

  • 以下代码是否正确? 错误!因为返回值18不符合返回值类型string的要求

    function foo(): string {return 18
    }
    
  • 如果函数(getSum)返回了数组中所有元素的和,以下代码表示什么? 计算两个结果的和

    getSum([1, 3, 5]) + getSum([10, 100, 1000])
    

4.3 return 的说明

  1. 将函数内部的计算结果返回。

  2. 终止函数代码执行,即:return 后面的代码不会执行。

    function fn(): number {return 18console.log('我不会执行,放在这,没有意义')
    }
    
  3. return 只能在函数中使用,否则会报错。

  4. return 可以单独使用(后面可以不跟内容),用来刻意终止函数的执行。

    function play(age: number): void {if (age < 18) {return}console.log('网吧上网好爽啊,王者、吃鸡两不误')
    }play(16) // 情况1:进入if后return,后续代码不执行
    play(20) // 情况2:不进if,直接打印内容: 网吧上网好爽啊,王者、吃鸡两不误
    

注意:如果函数没有返回值,默认返回值类型是:void(空),可省略不写。

function play(age: number) { /* ... */ }

return 的总结:

  • 能否在函数外面使用 return? 不能
  • return 后面的代码会执行吗?不会执行
  • return 后面不跟内容,单独使用,表示什么? 刻意终止函数代码执行
  • 函数没有返回值,默认返回值类型是什么?void

5. 函数基础总结

函数,即:声明一次但却可以调用任意多次的一段代码

通过将要实现的功能,使用函数封装起来,实现代码复用,提升开发效率。

函数的三种主要内容: 1 参数 2 函数体 3 返回值。

简化过程:

  1. 输入(参数) – 可选
  2. 处理(函数体)
  3. 输出(返回值)-- 可选

TypeScript:函数基础相关推荐

  1. TypeScript函数与类的使用基础知识点

    1.类的使用 1.1 类的基本使用 定义:TypeScript 是面向对象的JavaScript.                              类描述了所创建的对象共同的属性和方法.   ...

  2. TypeScript语法基础

    TypeScript语法基础 1 TypeScript 是什么 2 获取TypeScript 3 变量声明 4 数据类型 4.1 Boolean.Number.String.字面量 4.2 any与u ...

  3. TypeScript函数和类

    函数介绍 函数是JavaScript应用程序的基础.它帮助你实现抽象层,模拟类,信息隐藏和模块.在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定义行为的地方.TypeSc ...

  4. TypeScript 函数与以及类的使用

    一.函数 1.函数的基本使用 介绍 函数是JavaScript应用程序的基础.它帮助你实现抽象层,模拟类,信息隐藏和模块.在TypeScript里,虽然已经支持类,命名空间和模块,但函数仍然是主要的定 ...

  5. 3、TypeScript 函数

    目录 1. 函数的基本使用 2. 函数参数的处理 3. 构造函数 4. 函数重载 参数类型不同: 参数类型不同: 1. 函数的基本使用 介绍 函数是JavaScript应用程序的基础.它帮助你实现抽象 ...

  6. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  7. javaScript系列 [01]-javaScript函数基础

    [01]-javaScript函数基础 1.1 函数的创建和结构 函数的定义:函数是JavaScript的基础模块单元,包含一组语句,用于代码复用.信息隐蔽和组合调用. 函数的创建:在javaScri ...

  8. php vsftpd文件上传类,php ftp文件上传函数(基础版)

    php ftp文件上传函数(基础版) 复制代码 代码如下: // 定义变量 $local_file = 'local.zip'; $server_file = 'server.zip'; // 连接F ...

  9. python 函数进阶_Python学习入门基础:一篇文章搞定函数基础、函数进阶

    一.函数基础函数的快速体验 函数的基本使用 函数的参数 函数的返回值 函数的嵌套调用 在模块中定义函数私信小编001即可获取Python学习资料01. 函数的快速体验 1.1 快速体验 所谓函数,就是 ...

  10. 三, for循环----文件对象-----函数基础------模块基础

    for循环 文件对象 函数基础 模块基础 一,for 循环 1,for循环详解 二.文件对象 1,文件打开方法 2,文件输入 3,文件输出 4,操作文件 三,函数基础 1,函数基本操作 2,函数参数 ...

最新文章

  1. C、C++中的逻辑运算符
  2. Spring boot访问静态资源
  3. 你不应该忽略的五个机器学习项目一览
  4. (转)64bit上安装32位oracle 10 g出现错误:无法定位承诺工序输入点 getprocessimagifilenamew 于动态链接库PSAPI.DLL...
  5. Weekly Contest 141
  6. openwrt首次登录密码_什么是路由器登录密码 路由器登录密码介绍【详解】
  7. 多线程 CreateThread与_beginthreadex本质区别
  8. Nginx 502 Bad Gateway 自动重启脚本
  9. “我的开源项目被大厂‘盗用’了!”
  10. 机器人 林州重机_林州重机定增11亿 进军油服和机器人行业
  11. 电源压敏电阻的计算选择
  12. 霹雳吧啦Wz语义分割学习笔记P1
  13. 双非计算机研究生要不要读,“双非”大学研究生,到底值不值得读?
  14. mysql练习题库一
  15. matlab 冲激响应不变法,matlab实验七冲激响应不变法IIR数字滤波器设计.doc
  16. JSON.parse和JSON.stringify
  17. matlab的数值积分
  18. OneNote桌面版与UWP版避免自动切换字体的方案
  19. 美团如何“折叠时间”?
  20. java 分析类_java--分析简单java类与反射的联系

热门文章

  1. 11.C 语言连接 MySQL
  2. 68. 超越 Gzip 压缩
  3. 21. jQuery 遍历 - 后代
  4. 第012讲 盒子模型经典应用
  5. css3中transform-style的用法详解
  6. 2007年测试员的工具选择排名
  7. [CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)]飞行棋
  8. Eclipse、MyEclipse 快捷键
  9. 从闭包到 语法糖 装饰器
  10. layer —— 一个简单的jQuery弹出层插件