JavaScript 核心原理解析
周爱民
《JavaScript 语言精髓与编程实践》作者,南潮科技(Ruff)首席架构师
32699 人已学习
新⼈⾸单¥59
登录后,你可以任选3讲全文学习
课程目录
已完结/共 28 讲
开篇词 (1讲)
JavaScript 核心原理解析
15
15
1.0x
00:00/00:00
登录|注册

11 | throw 1;:它在“最简单语法榜”上排名第三

1
try语句
函数的内部过程
标签语句
循环语句
块语句
顺序执行的语句
引用的值
值的覆盖与读取
异常抛出
完成记录
表达式语句
空语句
throw 1
语句块执行
语句执行逻辑
最简单榜前三名语句
JavaScript的面向对象系统
JavaScript语言与ECMAScript规范
语法解析
JavaScript执行语句和函数的过程
流程控制逻辑
基本逻辑
引用类型与值类型
并行环境下的执行
串行环境下的执行
JavaScript语法榜
下一讲主题
知识回顾
JavaScript执行过程
ECMAScript规范
JavaScript语法榜知识关系脑图

该思维导图由 AI 生成,仅供参考

你好,我是周爱民,欢迎回到我的专栏。
今天我将为你介绍的是在 ECMAScript 规范中,实现起来“最简单”的 JavaScript 语法榜前三名的 JavaScript 语句。
标题中的throw 1就排在这个“最简单榜”第三名。
NOTE: 预定的加餐将是下一讲的内容,敬请期待。^^.

为什么讲最简单语法榜

为什么要介绍这个所谓的“最简单的 JavaScript 语法榜”呢?
在我看来,在 ECMAScript 规范中,对 JavaScript 语法的实现,尤其是语句、表达式,以及基础特性最核心的部分等等,都可以在对这前三名的实现过程和渐次演进关系中展示出来。甚至基本上可以说,你只要理解了最简单榜的前三名,也就理解了设计一门计算机语言的基础模型与逻辑
throw语句在 ECMAScript 规范描述中,它的执行实现逻辑只有三行:
ThrowStatement : throw Expression;
1.Let exprRef be the result of evaluating Expression.
2.Let exprValue be ? GetValue(exprRef).
3.Return ThrowCompletion(exprValue).
这三行代码描述包括两个Let语句,以及最后一个Return返回值。当然,这里的 Let/Return 是自然语言的语法描述,是 ECMAScript 规范中的写法,而不是某种语言的代码。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入解析了ECMAScript规范中实现最简单的JavaScript语法榜前三名的JavaScript语句。作者通过分析`throw 1`、空语句和`NormalCompletion()`的实现逻辑,展示了这些语句在ECMAScript规范中的执行过程和渐次演进关系。文章还探讨了语句的执行者、语法树结构以及语句的完成状态,强调了语句的值覆盖与读取规则。通过对ECMAScript规范中的语句实现细节的深入解析,读者可以更好地理解JavaScript语法的基础模型与逻辑。文章内容深入浅出,适合技术人员快速了解JavaScript语法的核心特点。文章还介绍了ECMAScript规范约定的JavaScript中所有语句的执行结果的可能范围,以及对引用值的处理和语句执行结果状态的讨论。最后,作者提到将在下一讲正式介绍JavaScript最重要的语言特性,即它的面向对象系统。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 核心原理解析》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 孜孜
    有一点不太明白,单值表达式` 1 `的result,怎么被转换语句` 1;`的result的?

    作者回复: 问题是个好问题。不过答案就在下一小节的加餐里。:)

    2020-06-18
    1
  • HoSalt
    老师,块级作用域在实际编码中拿不到,那有什么用,还是说函数调用返回值也是通过这种模式拿到的?

    作者回复: 任何情况下,你使用 setTimeout(function f() {...}, ...) 并能够在这个f()中拿到的作用域,都是块级的。例如: ``` let x = 100; if (true) { let x = 200; setTimeout(function() { console.log(x); }, 1000) } ``` 1s后,输出的x是200,则说明f()拿到了if后面的“块语句”的块级作用域。同理,你可以将这个示例用在switch/with中——因为switch/with自带一个块级作用域,而if并不自带。 所以你怎么会说“块级作用域在实际编码中拿不到”呢?

    2020-05-20
    5
  • 行问
    之前阅读本专栏时,也确实遇到没有能够阅读理解,很懵。则去翻看老师的书籍,本专栏结合书的知识点来阅读,会有大大的提高。比如,“值类型”与“引用类型”,在专栏中,我一开始也比较懵的,看书之后再来理解,则是比较清晰。
    2019-12-06
    1
    5
  • 许童童
    老师讲得挺好的,这个专栏主要是解决这样一个问题:JavaScript 是怎样的一门语言,以及它为什么是这样的一种语言。
    2019-12-06
    3
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部