这篇文是来自JavaScript 设计模式第二章精要的心得,有很多ㄚ琪没注意过的地方,ㄚ琪在此公开给各位瞧瞧。

减少全域变数

全域变数的问题

使用全域变数的问题是,‘应用程式或网站的所有程式码都共用它们,他们存在于相同的全域命名空间(namespace)之中,总是有可能发生命名冲突’。看到这ㄚ琪这才了解一直在写烂的JavaScript程式码,看来就觉得像是丁丁。另一个好理由是可移植性。

遗漏“var”的副作用

‘隐含的全域变数和明确定义的全域变数之间有个微小的差别,就是能否用delete运算子将变数删除:

  • 用var创造出的全域变数不可以删除
  • 不使用var隐含创造出来的全域变数可以删除’

 存取全域物件

单一var模式

‘在函式最开头使用单一个var述句是个非常有用的模式,具有下列优点:

  • 当你要寻找所有函式所需变数的时候,只需寻找单一个地方
  • 避免未宣告就使用变数所造成的逻辑错误
  • 帮助你记得宣告变数,于是可以尽少使用全域变数
  • 较少的程式码’

Hoisting:分散的var造成的问题

‘Javascript允许你在一个函式内有多个var叙述,并放在任何位置,而他们的行为跟在函式顶端就宣告一模一样。这行为称之为hoisting(提升)。如果你使用了一个变数,并在之后又宣告它的话,可能造成逻辑错误。’

for回圈

‘使用for回圈可以重复(iterate)整个阵列或类似阵列的物件。…通常for回圈的使用模式类似这样:

// sub-optimal loop
for (var i = 0; i < myarray.length; i++) {
// do something with myarray[i]
}

这问题就是每次都要存取阵列长度,这会拖慢你的程式。哇,ㄚ琪平常很懒就是直接这样用,没想到是有缺陷的,天龙人当久了总是会这样的,不被打一下可能都不会醒。

建议可以改成这样:

for (var i = 0, max = myarray.length; i < max; i++) {
// do something with myarray[i]
}

据说在HTMLCollections上使用回圈在任何的浏览器上可以快两倍,在IE则是快190倍,吼吼。

for-in 回圈

‘for-in 回圈应用来重复整个非阵列物件,它又称为列举(enumeration)。技术上,也可以用for-in回圈来重复整个阵列,但不建议这样做。

在列举物件属性时很重要的一件事是:使用hasOwnProperty()方法过滤掉来自原型(prototype)。’

不要扩充内建型别的原型

switch模式

避免隐含的型别转换

避免使用eval()

使用parseInt()转型成数值

编码规范

缩排

大括号

左括号的位置

空格

命名惯例

让建构式为首字母大写

字词的分隔方式:驼峰式命名法(Camel-CaseCamel Casecamel case)

其他命名方式

撰写注解

撰写API文件:使用JSDoc Toolkit(http://code.google.com/p/jsdoc-toolkit/)和YUIDoc (http://yuilibrary.com/projects/yuidoc)。

YUIDoc范例

一开始是为了帮助YUI (Yahoo! User Interface)文件化而开发。

写得让人看得懂

同侪审查

在推出产品最小化程式码

执行JSLint

这本书真的可以成王道,推。