如何才能优雅地书写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 ...
随机推荐
- ISC DHCP: Enterprise grade solution for configuration needs
https://www.isc.org/downloads/dhcp/ ISC DHCP: Enterprise grade solution for configuration needs All ...
- Android NDK JNI WARNING: illegal start byte 0x
今天攻克了JNI WARNING: illegal start byte 0x81这个问题. 问题出现的现象是通过jni调用加密方法,调用之后返回密文内容,结果就出现这个问题. 在国外查找一段时间之后 ...
- webpack的安装个配置
webpack在node下运行,首先先安装node 安装在全局:npm install webpack -g 在任何目录都可以运行 安装在局部:npm init -y npm install webp ...
- 全卷积神经网络FCN理解
论文地址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf 这篇论文使用全卷积神经网络来做语义上的图像分割,开创了这一领 ...
- [网页游戏开发]容器的使用及自定义Tab,RadioGroup,List,ViewStack
Morn里面,容器和其他普通组件不同,无需皮肤,所以也不能从组件树种拖动创建(Tab,RadioGroup例外),只能转换而来 Morn的容器组件主要有Box,Container,Panel,Tab, ...
- 二分法和牛顿迭代实现开根号函数:OC的实现
最近有人贴出BAT的面试题,题目链接. 就是实现系统的开根号的操作,并且要求一定的误差,其实这类题就是两种方法,二分法和牛顿迭代,现在用OC的方法实现如下: 第一:二分法实现 -(double)sqr ...
- Domino函件收集器的配置及使用方法
[背景] 今天一个朋友问我这样一个问题,他们OA的应用数据库和接口数据库部署在两台不同的server. 接口server主要负责和第三方系统进行集成,第三方系统调接口创建OA单据,OA系统进行审 ...
- Codeforces 8VC Venture Cup 2016 - Elimination Round F. Group Projects 差分DP*****
F. Group Projects There are n students in a class working on group projects. The students will div ...
- BootStrap-DualListBox怎样改造成为双树
BootStrap-DualListBox能够实现将所选择的列表项显示到右边,未选的列表项显示到左边. 但是左右两边的下拉框中都是单级列表.如果要实现将两边都是树(缩进树),选择某个节点时,其子节点也 ...
- Java,如何获取文件的MD5值
MessageDigest类封装得很不错,简单易用 不多说,直接上代码 import java.io.FileInputStream;import java.security.MessageDiges ...