JS 写法的选择

2018-12-20 12:27:52 +08:00
 auroraccc

写法一:

const foo = (data) => {
	if(data.length < 3) data = [1,2,3]
	return data.map(ele => ele + 1)
}

写法二:

const bar = (data) => {
	if(data.length < 3) return bar([1,2,3])
	return data.map(ele => ele + 1)
}

这两种写法哪种更好?或者其他更好的写法?

3238 次点击
所在节点    JavaScript
15 条回复
akatquas
2018-12-20 12:33:36 +08:00
我选第一种,效率和空间都略好一点
weixiangzhe
2018-12-20 12:34:03 +08:00
2, 不要直接改参数变量 会有不可预计的东西
Athrob
2018-12-20 12:36:33 +08:00
个人感觉写法一比较好。写法二 bar 改成 bar2,函数里面也得改。
Cbdy
2018-12-20 12:37:31 +08:00
```
function bar(data: number[]) {
let res = [2, 3, 4]
if (data.length > 3) {
res = data.map(e => e + 1)
}
return res
}
```
V2exUser
2018-12-20 12:39:10 +08:00
第一种,清晰
Mutoo
2018-12-20 12:39:33 +08:00
2 有 stack overflow 的风险(例如不小心写成 return bar([1,2]) 时,data.length < 3 永远成立)
dixeran
2018-12-20 12:40:46 +08:00
所以综合考虑 2L 和 3L,用方法二然后改成 callee?
Justin13
2018-12-20 12:46:59 +08:00
第二个,能纯尽量纯。
或者
```js
const foo = (data) => {
const newData = data.length < 3 ? [1,2,3] : data;
return newData.map(ele => ele + 1)
}
```
yuanfnadi
2018-12-20 12:58:18 +08:00
const foo = data => {
if (data.length < 3) {
return [2, 3, 4];
}
return data.map(ele => ele + 1);
};
whileFalse
2018-12-20 13:00:48 +08:00
第一种。
因为第二种无法扩展到有多个 if 的情况。

@Mutoo 这位仁兄说的问题我倒觉得无所谓。同是 bug,静默错误未必比直接卡死好多少。
otakustay
2018-12-20 13:32:38 +08:00
你不让我写三元的话,肯定选第 2 种,if 分支多起来也是不同分支不同 return。选择不去改变任何一个变量 /参数的值是很好的实践
wly19960911
2018-12-20 13:36:51 +08:00
2 的写法究竟是哪里来的。function 减少对外界变量的依赖,这个封装的基础。

const foo = (data) => {
if(data.length < 3) return [1,2,3]
return data.map(ele => ele + 1)
}

这样最好
cuzfinal
2018-12-20 13:40:21 +08:00
选 2,不要改参数
yikyo
2018-12-20 13:41:13 +08:00
第一种 ESLint 检测过不去。不能修改参数值。
jorneyr
2018-12-20 14:18:10 +08:00
只看得懂 1

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

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

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

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

© 2021 V2EX