javascript - 如何写出优雅的前端程序?
高洛峰
高洛峰 2017-04-10 13:11:17
[JavaScript讨论组]

如何写出优雅的前端程序?特别是在Web App这样的业务场景之下,JavaScript代码就更加重要了。
怎么样才能够写出健壮的,可维护的的前端程序。希望可以从各个方面进行解答,而不单单是在编码规范这一个方面。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
迷茫

健壮和可维护,要从两个方面来谈。

非JS特有

还是那句老生常谈:“高内聚,低耦合”。

你的模块依赖其他模块的程度越低,接口越少越明确,传递的内容越显而易见,整个程序就越容易维护。

群里 @怡红公子 等群友曾经讨论得出过这样一个结论:“如果觉得代码恶心但是可用,就把代码隐藏(封装)起来”。我觉得这很可行。

从这个意义上讲,Sea.js等模块依赖性管理的组件,是写JS大程序最为不可缺少的基础工具。

JS特有

不客气的说,JS是设计极其恶劣,充满着各种隐喻、假设和不良特性的,一门粗制滥造的有用语言。“JavaScript is VERY faulty”,不止我一个人这么说。

所以提到JS本身的可维护性,重要的就在于一定要躲开JS的若干大坑。例如:

  • 明确语义,避免一切不明确意图的语法,如果可能尽量使用strict模式
  • 注意为变量创建副本,函数调用尤其要小心不要污染原参数
  • 小心命名,可以把名字简单的起长一点,最终一定要避免重写掉并非JS保留字的undefined, require, define等,JS本身或常用库所采用的名称。
  • 小心作用域,必须避免无意中污染全局变量

如果要全方位的解答,大致也就像这样“只有原则没有细则”,全方位的都写出来真的太多。

“希望从各个方面得到解答”的问法,气氛上犹如“请从头到尾教我怎么做一个网站”,是Help Vampire的典型表现,还是希望尽量避免。


回答还是要看问题来取舍的,要不然岂不是这样的问题,都可以找一篇《优秀JS代码的xxx条原则》复制粘贴?

别笑,国内最大的低质量问答社区——百度知道就是这样做的!

以下解答以我一时想得起来的为限,全部关于如何对抗“一坨一坨”的观感:

  1. 合理为代码增加空格和空行,例如for (i=0; i<n; i++)观感肯定优于for(i=0;i<n;i++)
  2. 疯狂的将JS模块化。如果觉得一段代码观感恶心,又碍于实用不好去掉,就提取成单独的函数,甚至单做JS文件。如有必要,可使用Sea.js等工具帮助进行JS模块化。
  3. 疯狂的使用面向对象,替代面向过程。有助于同类代码·数据的内聚,以及方便直接表意。例如,array1.tail(5)观感肯定优于array_tail(array1, 5)。(只是随意的例子,array操作似乎真的不必如此大费周章)
  4. 使用Underscore.js、Zepto等库替代一些常见任务。原则是尽量轻量、好用、外部依赖少,从这一点上看现在的jQuery是必须慎用的。
  5. 可以尽量支持链式表达。例如obj2 = obj1.filt1().filt2().filt3()肯定优于右边的「代码段1」或「代码段2」。

「代码段1」

obj2 = obj1.filt1();
obj2 = obj2.filt2();
obj2 = obj2.filt3();

「代码段2」

obj2 = cls1_filt3(cls1_filt2(cls1_filt1(obj1)));
大家讲道理

1)必要的注释
2)命名规范
3)缩进换行
4)对齐
5)使用代码美化工具(如果有的话)

高洛峰

我觉得相比于写法的各有特色;

var PI = 3.14, win = window, obj = {};

obj.methodSomething = function () {};

jQuery("").m().m().m();

(function() {})();

vs

var PI = 3.14
var win = window
var obj = {
  methodSomething: function() { }
, k: null
}

;!function() {}()

风格不同是一层面,更难的是如何清晰的表达出想法,
最理想的"代码即文档"
ps: 其实我是来测试 插入代码为啥不换行滴...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号