如何才能优雅地书写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 ...
随机推荐
- VC++中全局变量的问题(转)
全局变量一般这样定义:1.在一类的.cpp中定义 int myInt;然后再在要用到的地方的.cpp里extern int myInt:这样就可以用了. 2.在stdafx.cpp中加入:int my ...
- 动态预览Xib的实现
写一个TestView继承于UIView,然后写个对应的xib,把xib的名字设置成TestView,这是标准的用xib加载这个view必须得条件 然后xib里把这个View的backgroundCo ...
- vue中引入字体文件
在用vue来写一官网的时候,想引入外部字体文件,毕竟总感觉他自己的字体有点难看,在这里记录下 1.先下载字体文件所需的.ttf文件 我这里想引入的是华文行楷字体 百度后下载了一个3M多的ttf文件 2 ...
- react native 之页面布局
第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...
- YTU 1055: 输入字符串以及输出
1055: 输入字符串以及输出 时间限制: 1 Sec 内存限制: 128 MB 提交: 694 解决: 476 题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字 ...
- FMDB 使用技巧
源链接: http://blog.csdn.net/iunion/article/details/7091744 - (BOOL) isTableOK:(NSString *)tableName{ ...
- codeforces B. Shower Line 解题报告
题目链接:http://codeforces.com/contest/431/problem/B 题目意思:给出5 * 5 的矩阵.从这个矩阵中选出合理的安排次序,使得happiness之和最大.当第 ...
- [原创]java获取word里面的文本
需求场景 开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式.表格. ...
- 【转载】u3d游戏客户端架构(---)
原文:http://blog.csdn.net/xtxy/article/details/8474506 主要是mvc架构, M层为数据层,两个用途:1保存数据:2发送数据更新信息: V层为视图层,两 ...
- UVA-11078(水题)
题意: 给一个序列,找两个整数a[i],a[j]使得a[i]-a[j]最大; 思路: 从前往后扫一遍;水题; AC代码: #include <bits/stdc++.h> /* #incl ...