JavaScript 的 finally 属于语法糖吗?

2018-12-19 09:08:30 +08:00
 mytry
有没有不用 finally 解决不了问题的情况?
3351 次点击
所在节点    程序员
16 条回复
Bryan0Z
2018-12-19 09:11:17 +08:00
try with resources 才是语法糖
当然有不用解决不了的,比如异常时资源的释放
Bryan0Z
2018-12-19 09:11:38 +08:00
唔,看错了,原来是 js …
quinoa42
2018-12-19 09:12:08 +08:00
一时想不出来,确实可以理解为把 finally 的 block 分别接在 try 和所有 catch 的后面
azh7138m
2018-12-19 09:13:38 +08:00
是。
没有。
es6 之后的这些东西,大部分都是语法糖。
aneureka
2018-12-19 09:14:53 +08:00
@quinoa42 其实有细微差别,finally 是无论如何都会执行的,很直接放在后面不一样(比如 try/catch 块里的前面有 return 语句的话就执行不到了)
quinoa42
2018-12-19 09:17:18 +08:00
@aneureka 确实,还有没有 catch 到的 exception 的情况
不过这两种特殊对待的话(把代码块加在 return 和 throw 前面)好像也可以只靠 try 和 catch 来实现
frankkai
2018-12-19 09:42:22 +08:00
我对 js 的语法糖已经无感了,还是 java 的 final 可爱
meetfly
2018-12-19 10:04:06 +08:00
什么叫语法糖
xlui
2018-12-19 10:25:41 +08:00
@meetfly 跟 #1 说的 Java 里的 try with resources 一样的,你不用也可以实现功能,但是用了写起来更舒服的语法。
Sparetire
2018-12-19 10:36:51 +08:00
似乎有一个不用 finally 解决不了的场景,生成器函数的资源释放,在 for/for of 迭代生成器的时候 break 了,需要关闭生成器中持有的文件之类,只能是 finally 了吧
Mutoo
2018-12-19 10:36:57 +08:00
finally 在 ECMA-262 第三版( 1999 年)里就是语法规范了,不是语法糖。

https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf
Sparetire
2018-12-19 10:41:00 +08:00
msg7086
2018-12-19 13:46:01 +08:00
语法糖这个东西,各人有各人的见解。说得杠一点,什么东西都是 CPU 指令集的语法糖。try catch 抛异常本来也是「语法糖」,比如 C 语言里就没这东西,大家都活得好好的,但是现代语言里都认为异常捕捉属于必须的语言特性了。finally 也一样。
otakustay
2018-12-19 13:48:12 +08:00
如果这样理解语法糖,很多关键字都会是语法糖:

- with:仔细想想不用你会死吗
- switch/case:写 if
- in:一路向上 hasOwnProperty
- break:自己写好 if 加上闭包变量值修改,绝对可以不用
- instanceof:自己看 prototype
- new:写函数 apply
- typeof:Object.prototype.toString

基于 for/while 都可以转成递归玩,所以你看……有意义吗
lqzhgood
2018-12-19 15:36:07 +08:00
P.then().catch().finally()

是不是也可以这样写,除了语义上的区别

P.then().catch().then()
meloner
2018-12-19 19:41:49 +08:00
别纠结这些, 能提高可读性、编码效率或是运行效率就是好特性
编程语言都是语法糖,1010 才是本质
1010 都是表象, 高低电平才是本质
高低电平都是表象.....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/518825

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX