没有合适的资源?快使用搜索试试~ 我知道了~
编写高质量代码改善JavaScript程序的188个建议(1-78).docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 158 浏览量
2022-05-10
15:18:02
上传
评论
收藏 932KB DOCX 举报
温馨提示
试读
64页
编写高质量代码改善JavaScript程序的188个建议(1-78).docx
资源推荐
资源详情
资源评论
第 1 章 JavaScript 语言基础
对于任何语言来说,如何选用代码的写法和算法最终会影响到执行效率。与其他语言不同,由于
可用资源有限,所以规范和优化更为重要。代码结构是执行速度的决定因素之一:代码量少
运行速度不一定快;代码量多,运行速度也不一定慢。性能损失与代码的组织方式及具体问题的解决办法
直接相关。
程序通常由很多部分组成,具体表现为函数、语句和表达式,它们必须准确无误地按照顺序排列。优秀的
程序应该拥有前瞻性的结构,可以预见到未来所需要的修改。优秀的程序也有一种清晰的表达方式。如果
一个程序被表达得很好,那么它更容易被理解,进而能够成功地被修改或修复。 代码经常被
直接发布,因此它应该自始至终具备发布质量。整洁是会带来价值的,通过在一个清晰且始终如一的风格
下编写的程序会更易于阅读。
的弱类型和过度宽容特征,没有为程序质量带来安全编译时的保证,为了弥补这一点,我们
应该按严格的规范进行编码。 包含大量脆弱的或有问题的特性,这些会妨碍编写优秀的程序。
我们应该避免 中那些糟糕的特性,还应该避免那些通常很有用但偶尔有害的特性。这样的特
性让人既爱又恨,避免它们就能避免日后开发中潜在的错误。
建议 1:警惕 Unicode 乱码
标准规定 语言基于 标准进行开发, 内核完全采用 字符集进
行编写,因此在 代码中每个字符都使用两个字节来表示,这意味着可以使用中文来命名变量
或函数名,例如:
var人名 ="张三";
function睡觉(谁){
alert(谁 +":快睡觉!都半夜三更了。");
}
睡觉(人名);
虽然 标准允许 字符出现在 程序的任何地方,但是在 和 中,
标准只允许 字符出现在注释或引号包含的字符串直接量中,在其他地方必须使用
字符集,在 标准化之前, 通常是不支持 编码的。考虑到
版本的兼容性及开发习惯,不建议使用汉字来命名变量或函数名。
由于 脚本一般都“寄宿”在网页中,并最终由浏览器来解析和执行,因此在考虑到
语言编码的同时,还要顾及嵌入页面的字符编码,以及浏览器支持的编码。不过现在的浏览器一般都支持
不同类型的字符集,只需要考虑页面字符编码与 语言编码一致即可,否则就会出现乱码现象。
当 初设 计 时 ,预 计 最 多 会 有 个 字 符, 从 那 以 后 慢慢 增长 到 了 一 百 万 个 字符 。
字符是 位的,这足够覆盖原有的 个字符,剩下的百万字符中的每一个都可以用一
对字符来表示。
把一对字符视为一个单一的字符,而 认为一对字符是两个不同的字符,这将会带来
很多问题,考虑到代码的安全性,我们应该尽量使用基本字符进行编码。
建议 2:正确辨析 JavaScript 句法中的词、句和段
语法包含了合法的 代码的所有规则和特征,它主要分为词法和句法。词法包括字
符编码、名词规则、特殊词规则等。词法侧重语言的底层实现(如语言编码问题等),以及基本规则的定
义(如标识符、关键字、注释等)。它们都不是最小的语义单位,却是构成语义单位的组成要素。例如,
规范字符编码集合、命名规则、标识符、关键字、注释规则、特殊字符用法等。
句法定义了语言的逻辑和结构,包括词、句和段的语法特性,其中段体现逻辑的结构,句表达可执行的命
令,词演绎逻辑的精髓。
段落使用完整的结构封装独立的逻辑。在 程序中,常用大括号来划分结构,大括号拥有封装
代码和逻辑的功能,由此形成一个独立的段落结构。例如,下面这些结构都可以形成独立的段落。
{
//对象
}
function(){
//函数
}
if(){
//条件
}
for(){
//循环
}
while(){
//循环
}
switch(){
//多条件
}
with(){
//作用域
}
try{
//异常处理
}
段落结构包含的内容可以是一条或多条语句。可以在段落起始标记( !)前面添加修饰词,如域谓词
("#、#)、逻辑谓词($、"#%、$、&"# 等)、函数谓词($'$()*)等。
语句是由多个词构成的完整逻辑。在 中,常用分号(+)来划分语句,有时也可以省略分号,
默认使用换行符表示完整的语句。
一条语句可以包含一个或多个词。例如,在下面两条语句中,第一条语句只有一个词,这是一个指令词,
该指令只能位于循环体或 &"# 结构体内。第二条语句包含 个词,% 表示函数名(即变量),小括
号表示运算符,而“,提示信息,-表示字符串直接量。
break;
alert("提示信息");
一条语句也可以包含一个或多个段落。例如,在下面这条语句中,直接把一个函数当做一个变量进行调用。
(function(i){
alert(i);
})("提示信息");
还可以把函数包含在一个闭包中形成多个结构嵌套,这个嵌套结构体就构成了一个复杂的语句,例如:
(function(i){
returnfunction(){
alert(i);
};
})("提示信息")();
语句一般至少包含一个词或段落,但是语句也可以什么都不包含,仅由一个分号进行标识,这样的句子称
为空语句。空语句常用做占位符。例如,在下面这个循环体内就包含了一个空语句。
for(vari;i<100;i++){
;
}
词语是 句法结构中的最小语义单位,包括指令(或称语句)、变量、直接量(或常量)、运
算符等。在 中,词语之间必须使用分隔符进行分隔,否则 就会错误解析。下面的
代码块是一个简单的求两个数平均值的方法。
vara=34;
varb=56;
functionaver(c,d){
return(c+d)/2;
}
alert(aver(a,b));
其 中 、 $' 、 ' 是 指 令 , 这 些 指 令 也 是 默 认 的 关 键 字 ;
、.、、、、% 为变量;、 是数值直接量;/、(、)、!、0、1、2、3是运算符。
建议 3:减少全局变量污染
定义全局变量有 种方式:
在任何函数外面直接执行 语句。
varf='value';
直接添加一个属性到全局对象上。全局对象是所有全局变量的容器。在 4. 浏览器中,全局对象名为
""。
window.f='value';
直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量。
f='value';
为方便初学者在使用前无须声明变量而有意设计了隐式的全局变量,然而不幸的是忘记声明变量成了一个
非常普遍的现象。 的策略是让那些被忘记预先声明的变量成为全局变量,这导致在程序中查
找 5') 变得非常困难。
语言最为糟糕的就是它对全局变量的依赖性。全局变量就是在所有作用域中都可见的变量。
全局变量在很小的程序中可能会带来方便,但随着程序越来越大,它很快变得难以处理。因为一个全局变
量可以被程序的任何部分在任意时间改变,使得程序的行为被极大地复杂化。在程序中使用全局变量降低
了程序的可靠性。
全局变量使在同一个程序中运行独立的子程序变得更难。如果某些全局变量的名称与子程序中的变量名称
相同,那么它们将会相互冲突并可能导致程序无法运行,而且通常还使程序难以调试。
实际上,这些全局变量削弱了程序的灵活性,应该避免使用全局变量。努力减少使用全局变量的方法:在
应用程序中创建唯一一个全局变量,并定义该变量为当前应用的容器。
varMy={};
My.name={
"first-name":"first",
"last-name":"last"
};
My.work={
number:123,
one:{
name:"one",
time:"2012-9-1412:55",
city:"beijing"
},
two:{
name:"two",
time:"2012-9-1212:42",
city:"shanghai"
}
};
只要把多个全局变量都追加在一个名称空间下,将显著降低与其他应用程序产生冲突的概率,应用程序也
会变得更容易阅读,因为 6"7 指向的是顶层结构。当然也可以使用闭包体将信息隐藏,它是另一种
有效减少“全局污染”的方法。
在编程语言中,作用域控制着变量与参数的可见性及生命周期。这为程序开发提供了一个重要的帮助,因
为它减少了名称冲突,并且提供了自动内存管理。
varfoo=function(){
vara=1,b=2;
varbar=function(){
varb=3,c=4;//a=1,b=3,c=4
a+=b+c;//a=8,b=3,c=4
};//a=1,b=2,c=undefined
bar();//a=21,b=2,c=undefined
};
大多数采用 C 语言语法的语言都拥有块级作用域。对于一个代码块,即包括在一对大括号中的语句,其中
定义的所有变量在代码块的外部是不可见的。定义在代码块中的变量在代码块执行结束后会被释放掉。但
是,对于 JavaScript 语言来说,虽然该语言支持代码块的语法形式,但是它并不支持块级作用域。
JavaScript 支持函数作用域,定义在函数中的参数和变量在函数外部是不可见的,并且在一个函数中
的任何位置定义的变量在该函数中的任何地方都可见。
其他主流编程语言都推荐尽可能迟地声明变量,但是在 JavaScript 中就不能够这样,因为它缺少块级
作用域,最好的做法是在函数体的顶部声明函数中可能用到的所有变量。
建议 4:注意 JavaScript 数据类型的特殊性(1)
剩余63页未读,继续阅读
资源评论
cailibin
- 粉丝: 4
- 资源: 7018
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功