一、基本技巧

1,变量释放的副作用

a、使用var创建的全局变量(在函数外部创建)不能删除。

b、不使用var创建的隐含全局变量(尽管在函数内部创建)可以删除。

//    定义三个全局变量
var global_var = 1;
global_novar = 2; // 反模式
(function(){
global_fromfunc = 3; // 反模式
}()) // 企图删除
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true // 测试删除情况
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_var; // "undefined"

在ES5 stick模式中,没有声明的变量赋值会报出错误(如上两种反模式)

2、只使用一个var并初始化为变量赋初值(提供一个单一的地址以查找函数需要的所有局部变量)

3、for循环

优化操作原因:

a、使用了最少的变量

b、逐步减至0,这样通常更快,因为同0比较比同数组的长度比较,或同非0数组比较更有效率

//   优化前
function () {
var i = 0,
max ,
myarray = [];
// ....
for ( i = 0, max = myarray.length, i < max; i++ ) {
// 处理 myarray[i]
}
}
//  优化后 

var i , myarray = [];
for ( i = myarray.length; i-- ) {
//处理 myarray[i]
} //优化后 使用while循环 var myarray = [],
i = myarray.length;
while ( i--) {
//处理 myarray[i]
}

4、for-in循环(调用函数)

var i,
hasOwn = Object.prototype.hasOwnProperty;
for ( i in man ) {
if ( hasOwn.call( man, i ) ) {
console.log(i, ":", man[i]);
}
}

5、内置的原型

if ( typeof Object.prototype.myMethod !== "function" ) {
Object.prototype.myMethod = function (){
// todo
}
}

6、避免使用eval(类似的还有setInterval(), setTimeout(), function())

//  反模式
var property = "name";
alert(eval( "obj." + property)); // 推荐的方法
var property = "name";
alert(obj[property]); // 反模式
setTimeout("myFunc()", 1000);
setTimeout("myFunc(1, 2, 3)", 1000); // 推荐的模式
setTimeout(myFunc(), 1000);
setTimeout(function () {
myFunc(1, 2, 3)
}, 1000);

7、转换字符为数字

//   parseInt()必须指定进制参数,否则遇到以0开头的解析为八进制
var month = "06",
year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10); // 另外一个字符串转换为数值的方法
+"08" //结果是8
Number("08") //
// 这样更快,但如果有字符就只能用parseInt(),其他都会失败并返回NaN

8、开放的大括号的位置(应放在前面语句同一行)

//   警告:夫预期的返回值
function func () {
return
{
name : "finder"
};
} // 等价于下面的形式
// 警告:夫预期的返回值
function func () {
return undefined;
// 并未访问到接下来的代码
{
name : "finder"
};
} // 总上,推荐以下写法
function func () {
return {
name : "finder"
};
}

9、空格

a、在函数中使用大括号开始符之前,例如if-else语句,循环语句和对象字面量等。

b、在大括号结束符和else或while之间

10、命名约定

a、构造函数首字母大写

b、使用下划线约定的变量:

  • 使用下划线说明是私有变量
  • 使用一个下划线标识受保护属性,使用两个下划线标识私有属性。
  • Firefox有一个属性,__proto__and__parent__

11、编写API文档

YUIDoc(Yahoo! User Interface )系统是一个和语言无关的系统,它仅仅解析注释的部分,而不解析javascript代码,缺点在于不得不在注释中声明属性名,参数名和方法名,例如@property first_name.而优点在于一旦适应了使用该系统进行注释,就可以使用该系统为任何其他语言的代码编写注释。

12、编写可读性强的代码

13、同行互查(cvs/svn/git)

14、在正式发布时精简代码

工具:YUICompress/Closure Compiler

15、运行JSLint

由javascript编写,可以作为 web工具使用,也可以下载下来并使用WSH(Windows Scripting Host)、JSC(Mac OSX的javascriptCore)、Rhino(Mozilla推出的javascript解析器)以在本地运行。

《javascript模式--by Stoyan Stefanov》书摘--基本技巧的更多相关文章

  1. 《javascript模式--by Stoyan Stefanov》书摘--汇总

    <javascript模式--by Stoyan Stefanov>书摘--基本技巧 http://www.cnblogs.com/liubei/p/JavascriptModeLog1. ...

  2. 《javascript模式--by Stoyan Stefanov》书摘--字面量和构造函数

    二.字面量和构造函数 1,能够使用对象字面量时,就没理由使用new Object构造函数 // 一个空对象var 0 = new Object();console.log( o.constructor ...

  3. 《javascript模式--by Stoyan Stefanov》书摘--函数

    三.函数 1.函数的命名属性 // IE下不支持name属性 var foo = function bar () { // todo }; foo.name; // "bar" 2 ...

  4. 《JavaScript模式》第2章 基本技巧

    @by Ruth92(转载请注明出处) 第2章 基本技巧 一.编写可维护的代码 阅读性好 具有一致性 预见性好 看起来如同一个人编写 有文档 编写注释 编写 API 文档 @namespace:用于命 ...

  5. javascript 模式(1)——代码复用

    程序的开发离不开代码的复用,通过代码复用可以减少开发和维护成本,在谈及代码复用的时候,会首先想到继承性,但继承并不是解决代码复用的唯一方式,还有其他的复用模式比如对象组合.本节将会讲解多种继承模式以实 ...

  6. 【读书笔记】读《JavaScript模式》 - 函数复用模式之现代继承模式

    现代继承模式可表述为:其他任何不需要以类的方式考虑得模式. 现代继承方式#1 —— 原型继承之无类继承模式 function object(o) { function F() {}; F.protot ...

  7. 【读书笔记】读《JavaScript模式》 - 函数复用模式之类式继承模式

    实现类式继承的目标是通过构造函数Child()获取来自于另外一个构造函数Parent()的属性,从而创建对象. 1.类式继承模式#1 —— 默认方式(原型指向父函数实例) function Paren ...

  8. 初涉JavaScript模式系列 阶段总结及规划

    总结 不知不觉写初涉JavaScript模式系列已经半个月了,没想到把一个个小点进行放大,竟然可以发现这么多东西. 期间生怕对JS的理解不到位而误导各位,读了很多书(个人感觉JS是最难的oo语言),也 ...

  9. 【前端】javascript中10常用的个小技巧总结

    javascript中10常用的个小技巧总结 本文转自:http://www.cnblogs.com/libin-1/p/6756393.html 1. new Set() 可能有人知道ES6中提供了 ...

随机推荐

  1. mybatis——学习笔记

    配置文件 <properties resource="dbconfig.properties"></properties> 1. properties 引入 ...

  2. 20181030NOIP模拟赛T2

    WYT的刷子 WYT有一把巨大的刷子,刷子的宽度为M米,现在WYT要使用这把大刷子去粉刷有N列的栅栏(每列宽度都为1米:每列的高度单位也为米,由输入数据给出). 使用刷子的规则是: 1.与地面垂直,从 ...

  3. BUG-jQuery提交表单submit方法-TypeError: e[h] is not a function

    问题:button按钮设置id为submit后,表单jquery.submit()无法提交,报告异常TypeError: e[h] is not a function 源码: 解决:参考http:// ...

  4. .Net Core使用Redis-从安装到使用

    一.安装 本文使用的操作系统是Centos7 在Redis中文网下载最新的Redis压缩包:http://www.redis.cn/ 把包上传到Liunx服务器上,cd 到包所在的目录执行以下命令 # ...

  5. python教程(二)·数据结构初探

    这一节,我来简单讲讲python自带的数据结构. 列表(list) 列表是常用的python数据结构,类似于C语言的数组,用来存储多个元素,与之不同的是,C语言的数组中的元素的类型是相同的,而列表可以 ...

  6. pix2code开发笔记

    1.软件安装 首先需要安装Python3和pip (1) Python3 环境搭建 Window 平台安装 Python:  https://www.python.org/downloads/wind ...

  7. Java基础——NIO(二)非阻塞式网络通信与NIO2新增类库

    一.NIO非阻塞式网络通信 1.阻塞与非阻塞的概念  传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在 ...

  8. Java线程和多线程(十二)——线程池基础

    Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务.开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池. 线程池是Java中多线程的一个重要概 ...

  9. 6月29-7月5日成都uber优步司机第一/二/三组奖励政策明细

    成都优步司机第一/二/三组奖励更新了,在写下文之前,我先吐槽一下:靠优步uber发财致富已成往事. 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全 ...

  10. 南京Uber优步司机奖励政策(7.20~7.26)

    人民优步奖励前提   *必须满足当周平均评分4.5星及以上,且当周接单率70%及以上,满足以上所有前提即可获得当周奖励 *刷单和红线行为立即封号并取消当周全部奖励及车费! 滴滴快车单单2.5倍,注册地 ...