← 编程学习中心
📖

Preparation

8 个课程
1
如何学习编程
2
计算机基础
3
键盘初识与基准键位
4
字母与数字基础
5
Shift键魔法
6
编程符号专精
7
功能键与修饰键
8
键盘学习总结与进阶
📚

Basics

22 个课程
1
什么是编程?
2
Hello World - 你的第一个程序
3
变量基础概念 - 给信息贴标签
4
变量赋值和操作 - 变量的高级用法
5
数据类型基础 - 数字和字符串
6
基础运算符 - 数字运算王国
7
布尔类型与比较运算符 - 程序的判断基础
8
条件判断基础 - 让程序学会做决定
9
变量作用域 - 变量的生存范围
10
条件语句进阶 - 复杂判断与嵌套结构
11
逻辑运算符 - 简化复杂条件判断
12
循环语句 - 程序的重复机器
13
循环进阶 - break、continue与循环控制
14
嵌套循环与作用域
15
循环调试实战技巧
16
循环不变量 - 理解循环的数学规律
17
数组基础 - 数据的收纳盒
18
数组操作方法 - 添加、删除和管理
19
数组高级 - 探索数组的强大功能
20
引用概念 - 变量的不同行为
21
函数基础 - 解决重复代码的秘密武器
22
函数实践与应用 - 巩固基础,实战应用
🚀

Intermediate

11 个课程
1
从控制台到画布 - p5.js初体验
2
图形绘制工具箱 - 基础图形函数
3
让世界多彩 - 颜色系统详解
4
文字的艺术 - 文本绘制与样式
5
球体动起来 - 动画基础入门
6
球体的交互魔法 - 鼠标与条件判断
7
面向对象编程 - Class类与实例
8
球的家族 - 循环与数组应用
9
球的个性 - 函数封装与参数化
10
球的变身 - 形状模式与高级绘制
11
球的世界 - 综合创作项目
🎯

Advanced

6 个课程
1
对象类型
2
对象类型应用
3
自定义类型
4
函数进阶 - 箭头函数与高级编程技巧
5
内置方法 - 字符串与数组的魔法工具
6
Switch语句与字符串模板 - 更优雅的代码表达
← 编程学习中心
📖

Preparation

8 个课程
1
如何学习编程
2
计算机基础
3
键盘初识与基准键位
4
字母与数字基础
5
Shift键魔法
6
编程符号专精
7
功能键与修饰键
8
键盘学习总结与进阶
📚

Basics

22 个课程
1
什么是编程?
2
Hello World - 你的第一个程序
3
变量基础概念 - 给信息贴标签
4
变量赋值和操作 - 变量的高级用法
5
数据类型基础 - 数字和字符串
6
基础运算符 - 数字运算王国
7
布尔类型与比较运算符 - 程序的判断基础
8
条件判断基础 - 让程序学会做决定
9
变量作用域 - 变量的生存范围
10
条件语句进阶 - 复杂判断与嵌套结构
11
逻辑运算符 - 简化复杂条件判断
12
循环语句 - 程序的重复机器
13
循环进阶 - break、continue与循环控制
14
嵌套循环与作用域
15
循环调试实战技巧
16
循环不变量 - 理解循环的数学规律
17
数组基础 - 数据的收纳盒
18
数组操作方法 - 添加、删除和管理
19
数组高级 - 探索数组的强大功能
20
引用概念 - 变量的不同行为
21
函数基础 - 解决重复代码的秘密武器
22
函数实践与应用 - 巩固基础,实战应用
🚀

Intermediate

11 个课程
1
从控制台到画布 - p5.js初体验
2
图形绘制工具箱 - 基础图形函数
3
让世界多彩 - 颜色系统详解
4
文字的艺术 - 文本绘制与样式
5
球体动起来 - 动画基础入门
6
球体的交互魔法 - 鼠标与条件判断
7
面向对象编程 - Class类与实例
8
球的家族 - 循环与数组应用
9
球的个性 - 函数封装与参数化
10
球的变身 - 形状模式与高级绘制
11
球的世界 - 综合创作项目
🎯

Advanced

6 个课程
1
对象类型
2
对象类型应用
3
自定义类型
4
函数进阶 - 箭头函数与高级编程技巧
5
内置方法 - 字符串与数组的魔法工具
6
Switch语句与字符串模板 - 更优雅的代码表达

函数进阶 - 函数作为参数与数组方法 🚀

🤔 发现问题:代码重复!

在函数实践章节中,我们写过这样的两个函数:

加载代码编辑器...

观察上面两个函数,你会发现它们的逻辑几乎完全一样:

  1. 创建一个空数组 result
  2. 遍历输入数组 numbers
  3. 用不同的条件判断元素是否符合要求
  4. 如果符合,就添加到 result 数组
  5. 最后返回 result 数组

唯一的不同就是判断条件!

  • filterGreaterThan 使用:numbers[i] > threshold
  • filterEvenNumbers 使用:numbers[i] % 2 === 0

思考题: 如果我们能把判断条件作为参数传递,就能创建一个通用的过滤函数!这就引出了编程中一个非常重要的概念:函数作为参数。

但是,要让函数能够接收其他函数作为参数,我们首先需要学习 TypeScript 的自定义类型系统,特别是如何定义"函数的类型"。

函数作为参数

什么是函数作为参数?

在传统编程中,我们习惯于将数据(数字、字符串、数组等)作为参数传递给函数。但更强大的是:函数本身也可以作为参数传递给其他函数!

生活类比:

  • 就像把菜谱交给不同的厨师执行
  • 或者把音乐乐谱交给不同的演奏家演奏
  • 函数就是程序中的"菜谱"或"乐谱",可以被传递和执行

这个概念的重要性:

  • 让我们能够创建可复用的算法框架
  • 实现策略模式:根据需要选择不同的处理方式
  • 是函数式编程的核心思想

🔤 TypeScript 类型定义:type 关键字

在深入学习函数作为参数之前,我们需要了解 TypeScript 的 type 关键字,它可以用来定义新的类型:

加载代码编辑器...

🎯 游戏中的函数参数应用:策略模式

1. 定义战斗策略的函数类型

加载代码编辑器...

2. 创建不同的策略函数

加载代码编辑器...

3. 创建接收函数参数的高阶函数

加载代码编辑器...

4. 游戏事件系统:函数作为回调

加载代码编辑器...

第二部分:数组方法 - 函数式编程的利器

现在我们知道了函数可以作为参数,JavaScript/TypeScript 为我们提供了许多内置的数组方法,这些方法都接收函数作为参数,让我们能够用更优雅的方式处理数组数据!

🎯 核心数组方法概览

方法功能返回值函数参数说明
filter()过滤数组新数组(item, index, array) => boolean
map()转换每个元素新数组(item, index, array) => any
reduce()累积计算单个值(accumulator, item, index, array) => any
forEach()遍历执行undefined(item, index, array) => void
find()查找元素找到的元素或undefined(item, index, array) => boolean
some()是否有满足条件的boolean(item, index, array) => boolean
every()是否都满足条件boolean(item, index, array) => boolean

🔍 filter() - 过滤数组元素

filter() 方法创建一个新数组,包含所有通过测试的元素。

加载代码编辑器...

🗺️ map() - 转换数组元素

map() 方法创建一个新数组,其结果是对原数组中的每个元素调用提供的函数后的返回值。

加载代码编辑器...

➕ reduce() - 累积计算

reduce() 方法对数组中的每个元素执行一个reducer函数(升序执行),将其结果汇总为单个返回值。

加载代码编辑器...

🔍 其他有用的数组方法

find() - 查找元素

加载代码编辑器...

some() 和 every() - 条件检查

加载代码编辑器...

forEach() - 简单遍历

加载代码编辑器...

🎮 综合应用:游戏数据处理实战

让我们结合所有学到的数组方法来处理一个完整的游戏数据场景:

加载代码编辑器...

第三部分:箭头函数 - 现代编程的艺术

🎨 为什么需要箭头函数?

现在我们已经掌握了函数作为参数和数组方法,让我们学习一种让这些概念使用起来更加简洁优雅的工具:箭头函数!

在传统编程中,我们这样定义函数:

加载代码编辑器...

箭头函数提供了更简洁的写法:

加载代码编辑器...

🔤 箭头函数语法详解

语法模板对比

传统函数箭头函数说明
function name(param) { return value; }const name = (param) => value;单参数,单返回值
function name(param1, param2) { ... }const name = (param1, param2) => { ... }多参数,多行代码
function name() { return value; }const name = () => value;无参数,单返回值

箭头函数的不同形式

1. 单参数,单行返回

加载代码编辑器...

2. 多参数,单行返回

加载代码编辑器...

3. 多行逻辑,需要大括号

加载代码编辑器...

4. 无参数的箭头函数

加载代码编辑器...

🎯 箭头函数与数组方法的完美结合

箭头函数与数组方法是天生的一对!让我们的代码变得更加简洁优雅:

加载代码编辑器...

💡 箭头函数的优势

1. 语法简洁

加载代码编辑器...

2. 函数式编程友好

加载代码编辑器...

3. 更好的this绑定(高级概念)

加载代码编辑器...
Previous lesson
Previous
自定义类型
Next
内置方法 - 字符串与数组的魔法工具
Next lesson