如何才能优雅地书写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 ...
随机推荐
- nextSibling和previousSibling
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- Designing a RESTful API with Python and Flask 201
rest服务器的搭建 - CSDN博客 http://blog.csdn.net/zhanghaotian2011/article/details/8760794 REST的架构设计 REST(Rep ...
- Oracle Exception
Oracle存储过程的异常处理 1.为了提高存储过程的健壮性,避免运行错误,当建立存储过程时应包含异常处理部分.2.异常(EXCEPTION)是一种PL/SQL标识符,包括预定义异常.非预定义异常和自 ...
- js中字符串函数indexOf与search的区别
IndexOf()方法是用来判断一个字符串是否存在于一个更长的字符串中.从长字符串左端到右端来搜索,如果存在该子字符串就返回它所处的位置(即索引).如果在被搜索的字符串没有找到要查找的字符串返回-1. ...
- NSString类的方法实现
创建一个新字符串并将其设置为 path 指定的文件的内容,使用字符编码enc,在error上返回错误 + (id)stringWithContentsOfURL:(NSURL *)url encodi ...
- js遍历map
//火狐控制台打印输出: Object { fileNumber="文件编号", fileName="文件名称"} console.log(map); for( ...
- MYSQL初级学习笔记八:MySQL中常用的函数!(视频序号:初级_45-50)
知识点十:MySQL中的函数(45-50) 数学函数: 名称 描述 CEIL() 进一取整 FLOOR() 舍一取整 MOD 取余数(取摸) POWER() 幂运算 ROUND() 四舍五入 TRUN ...
- hdu 4302 Holedox Eating(优先队列/线段树)
题意:一只蚂蚁位与原点,在x轴正半轴上会不时地出现一些蛋糕,蚂蚁每次想吃蛋糕时选取最近的去吃,如果前后距离相同,则吃眼前的那一块(即方向为蚂蚁的正前),求最后蚂蚁行进距离. 思路:优先队列q存储蚂蚁前 ...
- codeforces 691A A. Fashion in Berland(水题)
题目链接: A. Fashion in Berland 题意: 思路: AC代码: //#include <bits/stdc++.h> #include <iostream> ...
- Quartz2D绘图 及实例:下载进度
基础绘图: C语言coregraphics框架 绘制一条线:(不常用) UIBezierPath 路径画图 1.线段 线段2: 2.三角形 填充颜色 如果边框颜色和填充颜色都为红色:[[UICol ...