一、基本技巧

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. LeetCode 中级 -二叉树的层次遍历(102)

    题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 ...

  2. BZOJ 3771: Triple(生成函数 FFT)

    Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 911  Solved: 528[Submit][Status][Discuss] Description ...

  3. hibernate的报错信息a different object with the same identifier value was already associated with the session解决办法

    废话不多说,直接说原因,这是在hibernate中,有2个相同类型的实体类具有同样的主键标识符,然后调用update或者调用saveOrUpdate,我朋友出这个错的由于他想要update一条数据时, ...

  4. Vue中异步组件(结合webpack,转载)

    转载,原文出处:https://www.jianshu.com/p/40a364b5e964 1.什么是异步组件? 异步组件就是定义的时候什么都不做,只在组件需要渲染(组件第一次显示)的时候进行加载渲 ...

  5. 【Spark】源码分析之RDD的生成及stage的切分

    一.概述 Spark源码整体的逻辑(spark1.3.1): 从saveAsTextFile()方法入手 -->saveAsTextFile()  --> saveAsHadoopFile ...

  6. Python知乎热门话题爬取

    本例子是参考崔老师的Python3网络爬虫开发实战写的 看网页界面: 热门话题都在 explore-feed feed-item的div里面 源码如下: import requests from py ...

  7. JAVA基础 - 自定义异常类

    自定义异常类,代码还不是很明白,先存着以后参考. package week6; class ScoreException extends Exception { private static fina ...

  8. Python(1-8天总结)

    day1:变量:把程序运行过程中产生的中间值.暂时存储起来.方便后面的程序调用.变量命名规范:常量:所有字母大写注释:数据类型: 1. int 整数 2. str 字符串. 不会用字符串保存大量的数据 ...

  9. IA64与x86-64的区别

    win7 sp1下载地址:https://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/wind ...

  10. linux线程篇 (一) 线程的基本概念

    --进程 一个正在执行的程序,资源分配的最小单位 进程中的事情需要按照一定顺序区执行的,但是如何在一个进程中让一些事情同时发生呢?子进程存在缺陷 --引进多线程 --线程:有时又称轻量级进程,程序执行 ...