Dre*_*nai 2 javascript ecmascript-6
return在使用逻辑AND运算符的箭头函数中使用隐式语句是否有任何副作用(不良影响)&&?
这可能包括捆绑程序或优化程序删除代码的问题
例子:
// With return
const tap = fn => val => {
fn(val);
return val;
};
Run Code Online (Sandbox Code Playgroud)
// Without explicit return
const tap = fn => val => fn(val) && val;
Run Code Online (Sandbox Code Playgroud)
// In case fn(val) returns a falsy value
const tap = fn => val => (fn(val) || true) && val;
Run Code Online (Sandbox Code Playgroud)
// Comma sequence (added from accepted answer)
const tap = fn => val => (fn(val), val);
Run Code Online (Sandbox Code Playgroud)
在使用逻辑AND运算符&&的箭头函数中使用隐式return语句是否有任何副作用(不良影响)?
是的,有几个:
您在问题中提出的维护风险:如果fn(val)返回虚假值,则箭头函数返回该值,而不是val。编辑逻辑的人fn不太可能会意识到其他地方的代码假定它总是返回真实值。
维护的另一个危险是,如果必须拆开一个&&表达式,则向箭头函数添加另一个调用或其他逻辑会更加复杂。
从主观上讲,这类事情可能更难阅读,特别是因为似乎&&具有的意义不仅仅在于避免写作return。
您可以使用(或使用ab表示逗号)寻址#1 :
const tap = fn => val => (fn(val), val);
Run Code Online (Sandbox Code Playgroud)
我不建议这样做,只是指出这是一种选择。逗号运算符评估其左操作数,丢弃该结果,评估其右操作数,并将该结果作为结果。()当使用逗号表达式作为箭头简洁主体时,您需要在表达式周围,因为否则简洁主体将以逗号结尾。这意味着您要保存的唯一输入是单词return。
这可能包括捆绑程序或优化程序删除代码的问题
仅当那些捆绑器或优化器中存在错误时。他们的工作是正确理解代码。简洁的箭身不在此职权范围之内。
但是谈到工具:一般来说,我建议您尽可能清楚地编写代码。将其制作过程尽可能简短地留给矿工。