如何才能优雅地书写JS代码
第一:关于匿名函数的使用
要避免全局变量泛滥, 可以考虑使用匿名函数, 把不需要在外部访问的变量或者函数限制在一个比较小的范围内。
例如以下代码:
- <script>
- function func1(){
- var list = ["a", "b", "c"];
- for(var i = 0; i < list.length; i++){
- //..
- };
- }
- func1(); // 自动运行
- </script>
上述代码的作用是在页面加载的时候自动执行某些操作, 并不需要被外部调用, 但是它执行过后却留下了一个全局的函数。
像这种情况, 非常有必要使用匿名函数:
如下述代码所示:
- <script>
- (function func1(){
- var list = ["a", "b", "c"];
- for(var i = 0; i < list.length; i++){
- //..
- };
- })(); // 自动运行
- </script>
匿名函数的书写格式(不带参数的情况下):
- (function(){
- // 代码块
- })();
如果后面需要添加参数的话,则这样书写:
- (function(arg1, arg2, argN){
- //..
- })(arg1, arg2, argN);
第二:有关命名空间的使用规范:
命名空间可以有效减少全局变量的使用,是个很不错的规范JS代码的方式,在JS中命名空间需要进行如下操作:
“对象-属性”:
- window.com = {}
- window.com.bytter = {}
- window.com.bytter.hello = function(){
- alert("hello");
- }
那么什么情况下才会使用到命名空间呢?
如果您需要给某个已经存在的页面添加一些功能,有可能需要添加好多个函数,而且正好那个页面当中已经存在了好多的全局变量和函数,甚至还存在某些函数和你要新增加的函数同名,这时我们就可以使用命名空间了:
你创建一个命名空间, 把你的新函数都放在那个命名空间之下, 就可以了:
- <button type="button" onclick="pg.check.userAcc()">检查用户名</button>
- <button type="button" onclick="pg.check.userAcc()">检查帐号</button>
- <script>
- window.pg = {}
- window.pg.check = {
- // 检查用户名
- userName: function(){
- //..
- },
- // 检查帐号
- userAcc: function(){
- //..
- }
- };
- </script>
第三:如何保证多人书写的JS代码互不干扰
我们学习了匿名函数和命名空间,掌握了它们的正确使用方法,接下来我们就可以做到保证JS代码之间互不干扰:
我们把一个页面中自己维护的代码与别人维护的代码或者系统自带的代码分隔开来,做到与外部代码的耦合降低到最小。
- <script>
- // 页面命名空间
- window.pg = {}
- //命名空间的使用
- // 检查用户信息
- // 作者:张三
- // 最后更新: 2012.12.31
- (function(){
- // 私有变量
- var a, b, c;
- // 检查用户信息的相关方法
- window.pg.check = {
- // 检查用户名
- userName: function(){
- //..
- },
- // 检查帐号
- userAcc: function(){
- //..
- }
- };
- })(); // end 张三的代码
- //匿名函数的使用
- // xxx功能
- // 作者:李四
- // 最后更新: 2012.1.1
- (function(){
- window.pg.xxx = {
- //..
- }
- })(); // end 李四的代码
- </script>
第四:使得变量声明美观易读
1、变量必须在使用前用var进行声明;
2、变量的声明应该放在代码块或者函数的头部;
3、可在一行内声明多个变量,尽可能添加上注释信息。
- // 声明变量 银行名称, 银行帐号
- var type, acc;
- // 声明变量 银行名称, 银行帐号
- var type = "中国银行", acc = "xxxxxx";
- var type = "中国银行", // 银行名称
- acc = "xxxxxx"; // 银行帐号
- 尽量使用易于理解的变量名,如:
- var bankType = "中国银行",
- bankAccount = "xxxxxx";
第五:函数和变量的命名
普通变量名和函数名采用"小驼峰式命名法", 如:firstName、lastName
作为构造函数的函数采用"大驼峰式命名法", 如以下代码所示:
- var Person = function(){
- //..
- }
- var me = new Person();
- 常量用大写和下划线表示,如:
- var ROOT_PATH = "/v10/";
第六:正确地使用分号,可保证JS正常压缩
尽量做到每条语句使用分号结尾(特别是需要进行压缩的js,因为省略分号常常会导致压缩失败);
第七:有关数组的定义
尽量使用简便的方式进行数组的定义:
- // 比较好的定义方法
- var list = [1, 2, 3];
- // 不好的定义方法
- var list = new Array();
- list[0] = 1;
- list[1] = 2;
- list[2] = 3;
摘自:iteye技术博客[有删改]
如何才能优雅地书写JS代码的更多相关文章
- 几个你所不知道的技巧助你写出更优雅的vue.js代码
1. watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. 你可能会这么做: created(){ this.fetchData() }, watch: { keyword(){ ...
- 优雅的敲JS代码的几个原则
一.条件语句 1,使用 Array.includes 来处理多重 || 条件 // ----- 一般 ------ if (fruit == 'apple' || fr ...
- 优雅的vue.js
优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...
- 淘系工程师讲解的使用Spring特性优雅书写业务代码
使用Spring特性优雅书写业务代码 大家在日常业务开发工作中相信多多少少遇到过下面这样的几个场景: 当某一个特定事件或动作发生以后,需要执行很多联动动作,如果串行去执行的话太耗时,如果引入消息中 ...
- 如何在一个网站或者一个页面,去书写你的JS代码
// JavaScript Document //如何在一个网站或者一个页面,去书写你的JS代码: //1.js的分层(功能) : jquery(tools) 组件(ui) 应用(app), mvc( ...
- JS代码中加上alert才能正常显示效果
模拟一个生成验证码的效果,发现JS代码中加上alert可以正常刷新,没有alert时图片就会丢失,找到解决方法,但是还不是很明白,先记录下来. 生成验证码的servlet代码如下: package s ...
- webstorm的live templates快速编辑功能,让你的css JS代码书写速度飞起来
前言: Emmet的前身是大名鼎鼎的Zen coding,如果你从事Web前端开发的话,对该插件一定不会陌生.它使用仿CSS选择器的语法来生成代码, 大大提高了HTML/CSS代码编写的速度,比如下面 ...
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】
原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...
- 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!
原文地址 迁移到:http://www.bdata-cap.com/newsinfo/1741515.html 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和f ...
随机推荐
- 一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5
译者地址:[翻]一览新的 Android Gradle 构建工具:新的 DSL 结构 和 Gradle 2.5 原文:First Look at New Android Gradle Build To ...
- java zip压缩文件和文件夹
public class FileUtil { /** * 压缩文件-File * @param out zip流 * @param srcFiles 要压缩的文件 * @param path 相对路 ...
- ViewPagerIndicator
https://github.com/eltld/ViewPagerIndicator
- tomcat重启报错
一.tomcat重启报java环境变量错 报错信息详细如下: Neither the JAVA_HOME nor the JRE_HOME environment variable is define ...
- stm32GPIO8种模式
stm32GPIO工作模式及用途 1.浮空输入GPIO_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 2.带上拉输入GPIO_IPU——IO内部上拉电阻输入 ...
- iOS UIButton选中状态切换
UIButton*payBtn = [UIButtonbuttonWithType:UIButtonTypeCustom]; payBtn.frame=CGRectMake(size.width-24 ...
- nyoj 题目10 skiing —— 南阳oj
题目信息例如以下: skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪, 由于滑雪的确非常刺激.但是为了获得速度,滑的区 ...
- asp对中文编码及解码,Decode和Encode中文网址处理
<%'-------------------------------------------------------------------------- '================== ...
- Vue实现仿淘宝商品详情属性选择的功能
Vue实现仿淘宝商品详情属性选择的功能 先看下效果图:(同个属性内部单选,属性与属性之间可以多选) 主要实现过程: 所使用到的数据类型是(一个大数组里面嵌套了另一个数组)具体格式如下: attrA ...
- 一步一步学Silverlight 2系列(27):使用Brush进行填充
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...