V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mytry
V2EX  ›  程序员

JavaScript 的 finally 属于语法糖吗?

  •  1
     
  •   mytry · 2018-12-19 09:08:30 +08:00 · 3317 次点击
    这是一个创建于 1926 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有没有不用 finally 解决不了问题的情况?
    16 条回复    2018-12-19 19:41:49 +08:00
    Bryan0Z
        1
    Bryan0Z  
       2018-12-19 09:11:17 +08:00 via Android
    try with resources 才是语法糖
    当然有不用解决不了的,比如异常时资源的释放
    Bryan0Z
        2
    Bryan0Z  
       2018-12-19 09:11:38 +08:00 via Android
    唔,看错了,原来是 js …
    quinoa42
        3
    quinoa42  
       2018-12-19 09:12:08 +08:00
    一时想不出来,确实可以理解为把 finally 的 block 分别接在 try 和所有 catch 的后面
    azh7138m
        4
    azh7138m  
       2018-12-19 09:13:38 +08:00 via Android
    是。
    没有。
    es6 之后的这些东西,大部分都是语法糖。
    aneureka
        5
    aneureka  
       2018-12-19 09:14:53 +08:00 via Android
    @quinoa42 其实有细微差别,finally 是无论如何都会执行的,很直接放在后面不一样(比如 try/catch 块里的前面有 return 语句的话就执行不到了)
    quinoa42
        6
    quinoa42  
       2018-12-19 09:17:18 +08:00
    @aneureka 确实,还有没有 catch 到的 exception 的情况
    不过这两种特殊对待的话(把代码块加在 return 和 throw 前面)好像也可以只靠 try 和 catch 来实现
    frankkai
        7
    frankkai  
       2018-12-19 09:42:22 +08:00 via Android
    我对 js 的语法糖已经无感了,还是 java 的 final 可爱
    meetfly
        8
    meetfly  
       2018-12-19 10:04:06 +08:00
    什么叫语法糖
    xlui
        9
    xlui  
       2018-12-19 10:25:41 +08:00 via iPhone
    @meetfly 跟 #1 说的 Java 里的 try with resources 一样的,你不用也可以实现功能,但是用了写起来更舒服的语法。
    Sparetire
        10
    Sparetire  
       2018-12-19 10:36:51 +08:00 via Android
    似乎有一个不用 finally 解决不了的场景,生成器函数的资源释放,在 for/for of 迭代生成器的时候 break 了,需要关闭生成器中持有的文件之类,只能是 finally 了吧
    Mutoo
        11
    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
        12
    Sparetire  
       2018-12-19 10:41:00 +08:00 via Android   ❤️ 1
    msg7086
        13
    msg7086  
       2018-12-19 13:46:01 +08:00   ❤️ 1
    语法糖这个东西,各人有各人的见解。说得杠一点,什么东西都是 CPU 指令集的语法糖。try catch 抛异常本来也是「语法糖」,比如 C 语言里就没这东西,大家都活得好好的,但是现代语言里都认为异常捕捉属于必须的语言特性了。finally 也一样。
    otakustay
        14
    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
        15
    lqzhgood  
       2018-12-19 15:36:07 +08:00
    P.then().catch().finally()

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

    P.then().catch().then()
    meloner
        16
    meloner  
       2018-12-19 19:41:49 +08:00
    别纠结这些, 能提高可读性、编码效率或是运行效率就是好特性
    编程语言都是语法糖,1010 才是本质
    1010 都是表象, 高低电平才是本质
    高低电平都是表象.....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   960 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 21:44 · PVG 05:44 · LAX 14:44 · JFK 17:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.