() => X vs () => { return X } - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Aloento
V2EX    Javascript

() => X vs () => { return X }

  •  
  •   Aloento 2022-11-20 07:06:35 +08:00 3708 次点击
    这是一个创建于 1059 天前的主题,其中的信息可能已经有所发展或是发生改变。
    RT ,这俩有啥区别吗?

    比如
    useMemo(() => subscription(x), [x]);
    13 条回复    2022-11-21 15:52:48 +08:00
    qeqv
        2
    qeqv  
       2022-11-20 08:02:41 +08:00
    问之前不自己试一下吗?
    qeqv
        3
    qeqv  
       2022-11-20 08:05:10 +08:00
    @qeqv 哦,我弄错了。这两个语法上是一样的,不过注意第一种不能用逗号返回值。不过你这里逗号看作是函数参数的分隔,所以没问题
    horseInBlack
        4
    horseInBlack  
       2022-11-20 09:00:02 +08:00
    // 箭头函数的一般写法
    const arrowFunction1 = () => {
    return 123;
    };

    // 如果函数只有一个返回值,可以在箭头后只写返回值
    const arrowFunction2 = () => 123;

    // 如果返回值类型为对象,对象的括号会和函数体的括号冲突,这时候可以用圆括号包住花括号
    const arrowFunction3 = () => ({
    a: "hello",
    });
    netnr
        5
    netnr  
       2022-11-20 09:17:25 +08:00
    {} 可以写复杂的逻辑再 return
    sweetcola
        6
    sweetcola  
       2022-11-20 09:18:55 +08:00
    区别就是第一种简洁,好看,写起来会比第二种爽,有种畅快清凉感
    buxudashi
        7
    buxudashi  
       2022-11-20 10:11:15 +08:00
    区别就是。当有多行时。用后面的。当有一行时,简写为第一个。

    你学废了吗
    justin2018
        8
    justin2018  
       2022-11-20 10:52:16 +08:00
    箭头函数 - Javascript | MDN
    https://developer.mozilla.org/zh-CN/docs/Web/Javascript/Reference/Functions/Arrow_functions#%E5%87%BD%E6%95%B0%E4%BD%93

    在一个简写体中,只需要一个表达式,并附加一个隐式的返回值。在块体中,必须使用明确的 return 语句。
    Justin13
        9
    Justin13  
       2022-11-20 11:39:29 +08:00 via Android
    没区别,后者方便打断点
    sankemao
        10
    sankemao  
       2022-11-20 19:37:01 +08:00 via iPhone
    我喜欢后面的
    yaphets666
        11
    yaphets666  
       2022-11-21 11:22:52 +08:00
    有区别的,如果 X 是{1:2},第一种就不行了,需要加()
    libook
        12
    libook  
       2022-11-21 11:57:17 +08:00
    题主的意思是问箭头函数右侧是用表达式和用块的区别吗?
    程序上没啥区别,用表达式也是隐含有一个块级作用域并自动 returen ,也就是说实际上表达式写法会被处理成块写法。需要注意的是,右侧代码被解析成函数块的优先级高于 JSON 块,也就是说如果你要用表达式写法返回一个 JSON ,得外面套个括号,比如 ()=>({a:1}) 。

    其余的就是可读性问题了,如果你打算在箭头函数后面拼接三元运算符之类的,可能读起来会比较难理解。
    xingguang
        13
    xingguang  
       2022-11-21 15:52:48 +08:00
    就是简洁一些,如果返回的是个对象还可以这样写
    ```js
    () => ({ x:'xxx' });
    ```
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     958 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 19:40 PVG 03:40 LAX 12:40 JFK 15:40
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86