一、基本技巧

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. java servlet数据库查询并将数据显示到jsp页面

    需要的jar包:mysql-connector-java.jar build path只是个jar包的引用,部署的时候想不丢包最好还是手动拷贝到对应项目的lib文件下. 在try{}中定义的变量为局部 ...

  2. mvc 页面 去掉转义字符

    mvc 页面 去掉转义字符   mvc 后台返回json数据,用ViewBag 传回前台页面,但是传到前台页面的时候,带有转义字符.一直想去掉这个转义字符,苦恼了好久. 解决方案: mvc 页面有个这 ...

  3. 导入/导出excel和PHPExcel基本使用

    * PHPExcel基本使用 * PS:文章如果有误,请及时指出,给予修改 * 项目中导入PHPExcel * 可以去网上下载 github composer 都可以 * 为了方便下载,我将压缩包添加 ...

  4. ES6 imports用法

    import defaultExport from "module-name"; import * as name from "module-name"; // ...

  5. CAT 安装运行配置教程

    CAT安装教程 首先安装mysql数据库,具体步骤参阅<mysql免安装教程>--http://www.cnblogs.com/halberts/p/8723938.html 下载CAT代 ...

  6. C语言之一般树

    1.一般树 将这种一般的树转化成我们熟悉的单链表形式,这有三层,每一层都可以看成单链表或者多个分散的单链表 数据节点如下: struct tree {        int elem;        ...

  7. 542. 01 Matrix

    class Solution { public: vector<vector<int>> res; int m, n; vector<vector<int>& ...

  8. C语言:一个数组中只有两个数字是出现一次

    //1.一个数组中只有两个数字是出现一次, //其他所有数字都出现了两次. //找出这两个数字,编程实现.a //^=单独两个数的^结果 //单独出现的两个数不同位的标记 //position: ^结 ...

  9. Qt——模态、非模态

    模态: 只能操作对话框非模态:要使用 QDialog *_d = new QDialog();_d->setattribute(Qt::WA_DeleteOnClose);_d->show ...

  10. 解决WinScp连接被拒绝的问题

    尝试以下方法: 1) 开启|关闭防火墙(这里需要关闭) sudo ufw enable|disable 2) 开启远程服务 在终端界面输入:service sshd start.结果显示:ssh:un ...