
链式学习JavaScript| 前端开发学习 |对于有c语言基础的人来说较好的学习方式(第二章:函数与上下文)
专为C/C++开发者打造的JavaScript函数学习指南。本文对比JS函数表达式、箭头函数与C语言的异同,助你快速上手。核心内容聚焦this上下文、闭包、作用域提升等JS核心难点,通过类比帮你彻底理解。学习函数作为“一等公民”及map/filter/reduce等高阶用法,助你高效过渡到前端开发,掌握函数式编程精髓。
本文的写作是建立在以下前提下的,如果希望通过阅读本无来同步javascript的朋友可以先思考以下自己是否是这个系列文章的适合人士。
前言
这个系列是对于学习过c++、c语言的人专门设计的学习教程,目的是最大程度的减少时间消耗,同时避免快速学习多门语言导致的语法混淆,这本来是博主自己的需求,但是全网没有满足这个需求比较好的文章,即使有也缺乏系列化搜索,这个系列最大的意义是它但是在AI时代,我会按照“启发式学习”的方式,将最少的文字添加在其中。
适合人群(满足其中三条以上就算适合)
- 学习过OI
- 对c的语法非常熟悉
- 喜欢阅读文档解决问题
- 有趁手的AI模型以及科学上网
- 学习计算机以自学为主
如果确定了自己适合这个教程,就可以开始阅读接下来的文章了。
阅读效率提升
- 本文按照章节-序号-单元模式,实际上序号和章节是为了版式添加的,除了标记为重要的单元内容,其他都可以跳读。
- 本文将采取词典的写作模式,即不仅为了初次阅读,更是为了后续查找,即使一开始没有学习明白,也可以在后续补充思考。
- 本文的单元鼓励采取启发式学习,会为coder提供预先准备的提示词,凭借当前的AI技术,可以通过AI来补充学习,启发式学习,而不是对着文章的文字望文生义。
- 本网站会尽力保持长期运行,但是如果词典化的需求让你担心网站的访问,我们鼓励到自己的私人知识库下载,比如语雀。
- 本文鼓励复制和转载,如果在私人途径使用,只需要找到网站的对应MD文件下载即可,如果在公网转载,只要注明出处就可以。
展示单元
章节一:变量与作用域
(章节介绍)
1.变量定义
@ 1.1.Main
(此处是标记的重要知识,全部在小结的开头,建议通过这里的一些语句思考是否已经掌握)
@ (H) 1.1.var 表示优先阅读
@ 1.1.var 表示可以补读
然后就是单元,这是最小单位。
@ 1.1.AI
(此处是学习的提示词,对于一个编号单元群,只有一组提示词,如果要单元的提示词,建议自行询问)
章节二:函数与上下文
对于这一章,理解起来其实不难,毕竟JS语言和C++能实现的函数效果基本上是一致的,但是写法有一定区别。 我们可以先来看一个最接近C的JS函数: 为什么前面是function
?这其实不难理解,如果C中用int
定义函数指的是返回的变量类型,那我们上一章已经说过了JS没有区分变量类型(写法上),所以,这里的function
其实跟LET
一样,是告诉大家这里是什么,而不是返回值的类型,如果更方便理解,你可以认为是C++中 int add(int a,int b)
中的int
和JS中的function
都看做function int
的简写只是一个强调类型保留了类型,类型本身也代表了函数,另外一个不强调类型,但是需要占位符表示函数。 那如此,我们就可以开始选择性阅读下面几个编号,但是这里的编号都很重要,如果不阅读,可能读不懂JS代码,建议至少阅读其中的Main。
1.函数的三种定义方式(详细对比)
@ 1.1.Main
这里出现了console.log(),博主不是不讲,这在下一章,JavaScript 的“输出”方式(对比 C/C++)会详细讲解,这里不了解没有问题。
@ 1.2.函数表达式(H)
前面已经写过了相关的内容,这里只是告诉我们应该如何去比较和内化。
解释给 C++ 程序员:
const sayHi = function(name) {...} 相当于 C++ 中:
声明一个变量 sayHi 把一个匿名函数(lambda)赋值给它 和 C++ 一样:变量必须先定义后使用,没有“提升”。 const 类似 C++ 中的 const 变量,不能重新赋值。
1.3 箭头函数:没有 this
的函数
- 没有自己的
this
:继承外层作用域的this
- 没有
arguments
:用...args
代替 - 不能
new
:不是构造函数
类比:C++ Lambda 的 [this]
捕获。
本章后面没编号,只有小节,直接逻辑上升,因为内容较少,建议通读。
2.函数是一等公民:函数即值
在 C 中,你可以把函数地址赋给函数指针:
在 JavaScript 中,函数本身就是“值”,可以:
- 赋值给变量
- 作为参数传递
- 作为返回值返回
3.作用域与提升(Hoisting):JS 的“预解析”机制
- 函数提升:
function foo() {}
会被提升到作用域顶部 → 类比 C 的函数声明自动“前置” - 变量提升:
var
声明提升,但赋值不提升 → 类比“声明”与“定义”分离 let
/const
的暂时性死区(TDZ):更像 C++ 的块作用域
4.闭包(Closure):数据私有化的利器
在 C 中,静态局部变量可以“记住”状态:
在 JavaScript 中,闭包实现更强大的状态记忆:
本质:内部函数“捕获”了外层函数的变量环境。 用途:模块化、私有变量、柯里化。
5. this
上下文:动态绑定的执行环境(H)
这是 JS 与 C 最大的思维差异!
经典陷阱:回调函数中的 this
丢失。 解法:箭头函数、bind
、保存 self = this
。
6. 高阶函数与函数式编程
JS 的数组方法是函数式编程的体现:
类比:C++ 的 std::transform
、std::find_if
、std::accumulate
。
本章学习目标(学完你会)
- 理解 JS 函数的三种定义方式及其适用场景
- 掌函数作为“一等公民”的用法(回调、高阶函数)
- 彻底搞懂
this
的四种绑定规则,不再困惑 - 理解闭包的原理和实际应用(私有变量、模块)
- 能熟练使用箭头函数解决
this
丢失问题 - 掌
map
/filter
/reduce
等函数式编程方法
实践项目建议
- 项目 1:用闭包实现一个简单的“计数器模块”
- 项目 2:用高阶函数处理用户数据(过滤、排序、统计)
- 项目 3:在一个对象方法中使用
setTimeout
,用箭头函数保持this