箭头函数使用逻辑AND隐式返回

时间:2019-06-30 11:52:54

标签: javascript ecmascript-6

在使用逻辑AND运算符return的箭头函数中使用隐式&&语句有副作用吗?

这可能包括捆绑程序或优化程序删除代码的问题

示例:

// With return 
const tap = fn => val => {
    fn(val);
    return val;
  };
// Without explicit return
const tap = fn => val => fn(val) && val;
// In case fn(val) returns a falsy value
const tap = fn => val => (fn(val) || true) && val;
// Comma sequence (added from accepted answer)
const tap = fn => val => (fn(val), val);

1 个答案:

答案 0 :(得分:5)

  

在使用逻辑AND运算符&&的箭头函数中使用隐式return语句是否有任何副作用(不利影响)?

是的,有几个:

  1. 您在问题中提出的维护隐患:如果fn(val)返回虚假值,则那个值而不是val将成为箭头功能返回。编辑fn逻辑的人不太可能会意识到其他地方的代码假定它总是返回真实值。

  2. 另一个维护隐患是,如果必须分开&&表达式,则向箭头函数添加另一个调用或其他逻辑会更加复杂。

  3. 从主观上讲,这类事情可能更难阅读,特别是因为&&的意义不仅仅在于避免编写return

    < / li>

您可以使用comma operator(或有些人会说 ab 使用)来寻址#1:

const tap = fn => val => (fn(val), val);

我不建议,只是指出这是一个选择。逗号运算符评估其左操作数,丢弃该结果,评估其右操作数,并将该结果作为结果。当使用逗号表达式作为箭头简洁主体时,您需要在表达式周围加上(),因为否则简洁主体将以逗号结尾。这意味着您要保存的唯一输入是单词return

  

这可能包括捆绑程序或优化程序删除代码的问题

仅当这些捆绑器或优化器中存在错误时。他们的工作是正确理解代码。简洁的箭身不在此职权范围内。

但是谈到工具:一般来说,我建议尽可能清晰地编写代码。尽可能将简化程序的过程留给简化程序。