自己从事前端编码也有两年有余啦,时间总是比想象中流逝的快。岁月啊,请给我把时间的
脚步停下吧。不过,这是不可能的,我在这里不是抒发时间流逝的感慨。而是想在这分享两

年来码农生活的一些javascript编码的基本技巧。我在编码上算不上高手,但是我对编码的

规范,美观等一些代码洁癖控,这也是很多编码者的洁癖。好啦,下面正式切入正题。

第一、编写可维护的代码

什么叫着编写可维护的代码呢?就是当我的做出来的项目,拿给其它编码团队能很快的看懂
你编写的代码,你的整个项目的逻辑等等。一个项目的修改维护是要比开发一个项目的成本

是要高的。例如:当一个项目发布出现bug,最好的情况是当我们一发现bug,立即就可以修

复,这种情况是可能发生在刚写完这些代码后不久。否则,一旦转移到新的任务上,忘记了

这部分代码,就需要重新阅读这些代码:

a.花时间重新学习和理解相应的问题。
b.花时间理解当时用于解决相应问题的代码。

这对于大公司而言。还存在另一个问题,就是最终修改代码的人,往往不是当初写代码的人

,也不是发现bug的人。因此,要减少理解自己以前写的代码的时间,或者减少理解团队中

他人写的代码的时间,就变得非常关键。同时,这也影响到开发完成的时间(进而影响公司

的收入或者战略部署)和开发者的情绪,毕竟开发新产品更能让人兴奋,而不是花费那么多

时间在老的项目维护上。项目开发人员通常读代码比写代码更耗时间。在我工作到现在,就

还没有看到有编码注释很棒的同事,当然包括我在内这块本人做的不够好。

因此易维护的代码应该具有下面的几点:

1.阅读性好(如代码的缩进,注释啦)
2.具有一致性
3.预见性好
4.看起来像一个人编码
5.有文档

ps:以上是看到别人总结的,但是我觉得代码写的规范美观缩进对齐有比较详细的注释就是很不
错的编码习惯。

第二、尽量少用全局变量

javascript使用函数来管理作用域。变量在函数内声明,只有在函数内有效,不能在外部使
用。全局变量则反之,在函数外面(当然你也可以函数内部隐性创建变量)声明,在函数内

外都可用。

全局变量带来的问题是不可预计的,例如:团队多人合作变量命名重复,代码移植变量冲突
,使用第三方的跟踪和分析脚本的代码等等

例如:

// 程序员A的add函数
function add(v1, v2){
return v1 + v2;
} // 程序员B的add函数
function add(v1, v2, v3){
return v1 + v2 + v3;
} // 这样程序员A的函数就被程序员B的函数覆盖啦

例如
同时引入的js库,prototype.js和jQuery.js的$()函数冲突,当然这个解决冲突的已然不是

问题

javascript中经常会出人意料的创建全局变量

例如:

function sum(v1, v2){
// 全局变量就这样创建啦
sum = v1 + v2;
return sum;
} // 所以解决的规则就是用var声明变量
function sum(v1, v2){
// 局部变量ok
var sum = v1 + v2;
return sum;
}

*javascript中另一种创建隐式全局变量带var的声明的链式赋值

例如:

function test(){
// 悲剧来啦,b成为全局变量啦,这也许并不是你想要的
var a = b = 5;
// ...
} // 以上是在怎么发生的呢?这就跟运算从右至左的操作符优先级有关啦,如下代码: var a = (b = 5); // 如果对链式赋值的所以变量都进行声明,就不会创建出人意料的全局变量,如下代码: function test(){
var a ,b;
a = b =5; // 均为局部变量
// ...
}

第三、变量释放时的副作用

隐含全局变量与明确定义的全局变量有细微的不同,不同之处在于能否使用deleted操作符
撤销变量

a.使用var创建的全局变量不能删除
b.不使用var创建的隐含全局变量可以删除

这也说明全局变量严格来说不是真正的变量,而是全局对象的属性。属性可以通过delete操
作符删除,但变量不可以。以下代码说明问题:

// 定义三个全局变量
var global_val = 1;
global_noval = 2;
(function(){
global_formfunc = 3;
})(); // 删除变量
delete global_val; // false
delete global_noval; // true
delete global_formfunc; // true // 测试
console.log(typeof global_val); // number
console.log(typeof global_noval); // undefined
console.log(typeof global_formfunc); // undefined

第四、单一var模式

只使用一个var在函数顶部进行变量声明是一种非常有用的模式,但是在我的周围的很多童
鞋就没有做到这点,他们声明变量时就一批批的var。

那么使用单一var模式的好处:

1.提供单一的地址以便查找到函数需要的所以局部变量
2.防止变量在定义之前就被使用的逻辑
3.帮助牢记要声明变量,以尽可能少的使用全局变量
4.更少的编码

单一模式的代码:

// 使用一个var关键字声明由逗号分割的多个变量
function test(){
var a = 1,
b = 2,
c = 3;
// ...
}

第五、零散变量的问题

在javascript函数中可以在任意地方声明多个变量,无论在哪里声明变量,效果都等同于在
函数顶部声明,这就是大家说的“变量提升”,视为已经声明,哪怕是在变量声明前就是用

。下面看段代码,这也是很多面试题出现概率很高的一个题:

var myname = 'qh';
function test(){
console.log(myname); // undefined
var myname = 'xjm';
console.log(mynem); // 'xjm' }
test()

看到上面的例子很多对js语法不了解的人都可能认为,第一个输出的是qh,第二个是xjm,
这是一种合乎情理的期望。但是实事不是这样的,第一个是undefined,因为myname被看作

声明为函数的本地变量,所有的变量声明都提升到函数的最顶部。

前面的代码断运行结果和以下代码一样:

var myname = 'qh';
function test(){
var myname; // 等同于-> var myname = undefined;
console.log(myname); // undefined
myname = 'xjm';
console.log(mynem); // 局部变量 'xjm'
}
test()

好啦,今天也说了不少javascript方面的基本技巧,这些也是我以前工作时候走过的弯路,
后来经过看书找资料啊,把它们汇总起来,希望或多或少对你们的学习有那么一点点帮助,

后期还会有总结敬请期待。

编写javascript的基本技巧一的更多相关文章

  1. 编写javascript的基本技巧

    第一.编写可维护的代码 什么叫着编写可维护的代码呢?就是当我的做出来的项目,拿给其它编码团队能很快的看懂 你编写的代码,你的整个项目的逻辑等等.一个项目的修改维护是要比开发一个项目的成本 是要高的.例 ...

  2. 12个实用的 Javascript 奇淫技巧

    这里分享12个实用的 Javascript 奇淫技巧.JavaScript自1995年诞生以来已过去了16个年头,如今全世界无数的网页在依靠她完成各种关键任务,JavaScript曾在Tiobe发布的 ...

  3. 如果让莎士比亚、海明威编写JavaScript代码

    本文作者Angus Croll是Twitter工程师.JavaScript迷.文学迷,并且非常喜欢作家海明威.他在梦中"梦见"一些名人编写JavaScript代码,不同的作家呈现出 ...

  4. 编写Javascript类库(jQuery版

    编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章 Posted on 2014-11-13 09:29 lzhdim 阅读(653) 评论(1) 编辑 收藏 本系列文 ...

  5. Python 内编写类的各种技巧和方法

    Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...

  6. 林大妈的JavaScript基础知识(二):编写JavaScript代码前的一些简单工作

    在介绍JavaScript语法前,我们需要知道,学习语法必须要多利用手敲代码来巩固记忆.因此,由于JavaScript的特性,它不能像C++和Java一样独立地编译及运行,我们需要在调试运行JavaS ...

  7. Python中编写类的各种技巧和方法

    简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...

  8. 初学者学习JavaScript的实用技巧!

    Javascript是一种高级编程语言,通过解释执行.它是一门动态类型,面向对象(基于原型)的直译语言.它已经由欧洲电脑制造商协会通过ECMAScript实现语言标准化,它被世界上的绝大多数网站所使用 ...

  9. Lua 学习 chapter30 编写c函数的技巧 - Jow的博客

    目录 数组操作 字符串操作 在c函数中保存状态 生活总需要一点仪式感,然后慢慢的像那个趋向完美的自己靠近. 数组操作 Lua中的数组就是以特殊的方式使用边.像lua_setttable and lua ...

随机推荐

  1. WS-* 协议

    Web服务作为实现SOA中服务的最主要手段.跟Web Service相关的标准,它们大多以“WS-”作为名字的前缀,所以统称WS-*. Web服务最基本的协议包括UDDI,WSDL和SOAP,通过它们 ...

  2. Linux Skills

    ++实现RedHat非正常关机的自动磁盘修复先登录到服务器,然后在/etc/sysconfig里增加一个文件autofsck,内容如下:AUTOFSCK_DEF_CHECK=yesPROMPT=yes ...

  3. Unity Shader入门精要读书笔记(二)UnityShader概述

    第三章<UnityShader概述>的读书笔记: 1.Unity Shader模板提供了几种选择: 标准光照模型(新添加的基于物理的渲染方法) 不含光照的基本的顶点.片元着色器 屏幕后处理 ...

  4. SE新手游操控创新:一个按键=五个技能

    转自:http://www.gamelook.com.cn/2015/01/201299 GameLook报道 / 日本游戏厂商一向擅长搞发明创造,除了诞生了各种烧脑奇葩游戏以外,日本主流手机游戏的核 ...

  5. 第10章 深入理解Session与Cookie

    需要很多Cookie时,考虑HTTP对Cookie数量和大小的限制. 几百或更多台服务器的时候,如何解决Session在多态服务器之间共享的问题. 还有一些安全问题,如Cookie被盗,Cookie伪 ...

  6. python's fifteenth day for me 递归函数

    递归... def age(n): if n == 1: return 18 else: return age(n-1)+2 # 反复调用函数age() print(age(4)) l = [1,3, ...

  7. 我是怎么用python模仿勒索软件加密文件的(病毒)

    前言: 今天下午上学,用python写个勒索脚本然后打包成exe是个不错的选择 我们来搞事情吧.看那学校我就不想上学. 0x01:要用到的模块,各位请自行准备 import win32api,win3 ...

  8. 科学家开发新AI系统,可读取大脑信息并表达复杂思想

    我们终于找到了一种方法,可以在核磁共振成像的信号中看到这种复杂的想法.美国卡内基梅隆大学的Marcel Just说,思维和大脑活动模式之间的对应关系告诉我们这些想法是如何构建的. 人工智能系统表明,大 ...

  9. js 正则匹配 小结

    JS的正则表达式 rge.test(str) 检验目标对象中是否包含匹配模式,并相应的返回true或false   rge.source str.search(rge) 将返回一个整数值,指明这个匹配 ...

  10. IIS监控应用程序池和站点假死,自动重启IIS小工具

    文章技术适合初学者.高级的C#开发工程师这些估计都熟悉到烂了,望不要喷. 第一.C#代码要操作IIS 就必须先导入 Microsoft.Web.Administration.dll ,方便控制台程序做 ...