手把手带你写一门编程语言
宫文学
北京原点代码 CEO
7235 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 49 讲
起步篇:让一门超简单的语言跑起来 (21讲)
结束语 (1讲)
手把手带你写一门编程语言
15
15
1.0x
00:00/00:00
登录|注册

33|函数式编程第2关:实现闭包特性

你好,我是宫文学。
上节课,我们实现了函数式编程的一个重要特性:高阶函数。今天这节课,我们继续来实现函数式编程的另一个重要特性,也就是闭包。
闭包机制能实现信息的封装、缓存内部状态数据等等,所以被资深程序员所喜欢,并被用于实现各种框架、类库等等。相信很多程序员都了解过闭包的概念,但往往对它的内在机制不是十分清楚。
今天这节课,我会带你了解闭包的原理和实现机制。在这个过程中,你会了解到闭包数据的形成机制、词法作用域的概念、闭包和面向对象特性的相似性,以及如何访问位于其他栈桢中的数据。
首先,让我们了解一下闭包的技术实质,从而确定如何让我们的语言支持闭包特性。

理解闭包的实质

我们先通过一个例子来了解闭包的特点。在下面的示例程序中有一个 ID 的生成器。这个生成器是一个函数,但它把一个内部函数作为返回值来返回。这个返回值被赋给了函数类型的变量 id1,然后调用这个函数。
function idGenerator():number{//()=>number{
let nextId = 0;
function getId(){
return nextId++; //访问了外部作用域的一个变量
}
return getId;
}
println("\nid1:");
let id1 = idGenerator();
println(id1()); //0
println(id1()); //1
//新创建一个闭包,重新开始编号
println("\nid2:");
let id2 = idGenerator();
println(id2()); //0
println(id2()); //1
//闭包可以通过赋值和参数传递,在没有任何变量引用它的时候,生命周期才会结束。
println("\nid3:");
let id3 = id1;
println(id3()); //2
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一门编程语言》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 爱笑的布谷鸟
    为什么会出现闭包呢?闭包技术的出现,是为了解决什么问题呢?
    归属地:湖南
    1
  • ifelse
    学习打卡
    归属地:浙江
  • kylin
  • 奋斗的蜗牛
    赞,闭包的实现也是玄学
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部