JavaScript 这样写,不知道为什么,总觉有点别扭

2019-06-26 13:34:41 +08:00
 pinews
if (xxx) {
ele.onclick = funA;
} else {
ele.onclick = funB;
}

总感觉哪里有问题。
4613 次点击
所在节点    程序员
33 条回复
tofishes
2019-06-26 17:20:01 +08:00
你对 if-else 是不是有什么误解?两个条件分支是不假,但同时只会执行其中一条分支,只执行一条分支的话,哪里来的变来变去?

ok,就算变来变去,同一个元素的 onclick 被覆盖一下不行么,跟变量重新赋值一样,有什么不能接受的?
mooncakejs
2019-06-26 17:23:26 +08:00
没问题啊,上面给 ternary 的,感觉还不如 if
mooncakejs
2019-06-26 17:23:50 +08:00
不过确实 onclick 不如 addEventListener,逻辑可以在两个里面实现
libook
2019-06-26 17:30:27 +08:00
不如试试在内部判断分流?

ele.onclick = ()=>{
if(xxx) _funcA() else _funcB();
};
Trim21
2019-06-26 17:45:04 +08:00
onclick 这里只被赋值了一次 也没有变来变去的啊
overflow99
2019-06-26 18:32:45 +08:00
这样写不合理,函数有声明提升,建议把判断卸载函数里
aleen42
2019-06-26 22:00:58 +08:00
小心點,可能會內存洩漏
Sparetire
2019-06-27 01:33:55 +08:00
楼上一群说不合理,讲道理合不合理也要具体情况具体分析吧,这里 if 写里面和写外面明显不等价,而如果 if 的判断条件 xxx 是一个开销很大的函数调用,写外面甚至还算得上是一个小优化
jingyulong
2019-06-27 02:33:28 +08:00
if 里面写函数怪怪的,感觉哪里有问题
Mutoo
2019-06-27 06:58:23 +08:00
1) 函数在 JS 里是第一公民( first class ),与变量可以被赋值传递。
2) onclick 是 DOM LEVEL 0 的事件机制,非常原始。如果开发现代应该建议直接上 DOM LEVEL 3 的事件机制 dom.addEventListener()
dzm
2019-06-27 09:54:45 +08:00
还没这样写过 onclick...总感觉这样写有点理解障碍?
purelanren
2019-06-27 11:43:01 +08:00
前提:这个判断应该是个业务逻辑,业务逻辑是客观存在的,这个判断是难以避免的
所以这个判断不是以现在的写法,就是统一写在一个函数里面,在新的函数里面进行判断

那么就要分两种情况:
1. 这段代码是需要多次执行的,那些外面和写里面性能没区别
2. 这段代码是一次性执行的,那写在外面在性能上而言甚至优于写里面

至于 onClick 还是 addEventListener,看业务情况:
1. 需要兼容 ie 较低版本,或者这个 dom 只需要绑定一个 click 回调,onClick 无疑是最方便的,既不需要兼容也不需要在再次绑定时卸载事件
2. 多个点击回调,肯定用 addEventListener,不过就上面这段代码已经存在而言,应该不是这类情况

结论:目前业务逻辑下没啥问题,但是你改成自己喜欢的写法也没问题。只能说对业务和性能没啥产出,不过自己维护的代码让自己舒服这点很重要~
meepo3927
2019-06-27 15:49:06 +08:00
好久不写 onclick 了, 都是 addEventListener 或者 attachEvent

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

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

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

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

© 2021 V2EX