ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

副队长JavaScript教程(37)-揭开JS函数的面纱

副队长JavaScript教程(37)-揭开JS函数的面纱

点此查看所有教程、项目、源码导航

文章目录

  • 1. 背景
  • 2. 揭开 JS 函数的真面目
  • 3. 函数的调用
  • 4. 小结

1. 背景

上一篇,我们理解了函数的定位:它是用来复用经验的载体。
当时我们分析得出,一个函数有两大核心部分:函数名、函数体。
函数名用来区分是什么经验,比如是开车的经验,还是网购的经验;函数体里面存放这件事一步步的操作流程。

顺着这个思路,我们当时猜想函数大概长这样:

这是一个函数:开车{console.log("1.打开车门");console.log("2.系好安全带");console.log("3.启动车辆");console.log("4.踩油门,开始驾驶");}

但是我们并不是 JS 语言的设计者,不能自己规定语法。而且 JS 是国外创造的语言,自然不会用 “这是一个函数” 这种中文标识。
这一篇,我们就来看 JS 里面标准的函数写法。

2. 揭开 JS 函数的真面目

同样以开车这个例子,JS 里正确定义函数的代码是这样:

functiondriveCar(){console.log("1.打开车门");console.log("2.系好安全带");console.log("3.启动车辆");console.log("4.踩油门,开始驾驶");}

我们拆开每一部分来讲:

  • function:是 JS 的关键字,专门用来告诉浏览器:接下来我们要定义一个函数了。
  • driveCar:这就是函数名。一个项目里会写很多函数,给它起名字,方便我们区分,比如开车、计算加法、打印提示。命名尽量见名知意。
  • ():函数名字后面必须带上一对小括号,这是函数的标志性特征。后面的课程我们会学到,这个括号还有传递数据的能力。
  • {}包裹起来的内容就是函数体,里面写我们要封装的所有步骤代码。

核心还是我们上一篇说的两点:函数名用来标记是什么经验,函数体存放经验的具体步骤。

3. 函数的调用

我们积累经验,最终目的就是拿来使用。在编程里,使用函数,专业叫法是调用函数。

先看没有函数的时候,如果要教三个人开车,我们只能重复写三遍完整流程:

// 教第1个人开车{console.log("1.打开车门");console.log("2.系好安全带");console.log("3.启动车辆");console.log("4.踩油门,开始驾驶");}// 教第2个人开车{console.log("1.打开车门");console.log("2.系好安全带");console.log("3.启动车辆");console.log("4.踩油门,开始驾驶");}// 教第3个人开车{console.log("1.打开车门");console.log("2.系好安全带");console.log("3.启动车辆");console.log("4.踩油门,开始驾驶");}

有了函数之后,逻辑就不一样了:我们先一次性把开车流程定义好,之后每需要一次,就调用一次。

// 定义函数:相当于把开车的经验提前写好存起来functiondriveCar(){console.log("1.打开车门");console.log("2.系好安全带");console.log("3.启动车辆");console.log("4.踩油门,开始驾驶");}// 教第1个人开车driveCar();// 教第2个人开车driveCar();// 教第3个人开车driveCar();

写driveCar();就是调用这个函数,每写一次,里面的步骤就执行一遍。

这里有一个非常关键的知识点:
只定义函数的时候,函数里面的代码不会运行,仅仅是保存这套流程。只有当我们写代码调用它的时候,函数体里面的代码才会执行。

4. 小结

函数给我们带来的好处,就是把一套固定的操作提前封装好。
以后再需要做这件事,不用重复抄写一大堆代码,直接调用函数就可以。
程序员不需要反复去写重复的步骤,只需要封装一次,随时取用,这就是代码复用的魅力。

预告:现在这个开车函数是固定不变的,下一篇我们学习参数,让函数变得更灵活,比如可以区分是学手动挡还是自动挡。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进