JavaScript高级程序设计(第3版)学习笔记5 js语句(2)

将代码放在try块中,使得异常发生时能够做出相应的处理。

 
throw语句   throw e;    抛出异常。  
debugger语句   debugger;   调试。  
return语句  

return;

return expression;

 

返回语句。在return之后没有返回时,返回undefined。

 

对于语句,说明如下:

1、关于语句要不要加上分号结束符(;),我的观点是给每条语句都加上,不要让引擎去猜测你的程序。不过昨天看到一篇文章和我的观点正好相反,也颇能言之成理,虽然并没有改变我的观点,不过倒也令我的眼界更为宽阔。

2、对于var语句,由于ECMAScript中有声明提升现象,建议将一个作用域中用到的变量都放到顶部,用一个var语句定义多个变量,这样容易理解,也不易出错。目前很多JS库也多采用这种形式,下面是取自jQuery开始中的代码:

复制代码 代码如下:


var document = window.document,
navigator = window.navigator,
location = window.location;


3、用于语句块的({}),也可用于定义对象字面量。在ECMAScript中,没有块级作用域。
4、对于四种循环语句(do-while、while、for、for-in),由于for-in语句每次循环都会搜索对象本身和其原型,因此效率会比较低。关于for循环语句的优化:

复制代码 代码如下:


// 1.一般for循环
for(var i=0; i < arr.length; i++){
}
// 2.上面在每一次循环都会重新计算一次arr的长度,如过arr是dom操作的话,会非常明显的影响效率,可以改进一下
for(var i=0,l=arr.length; i<l; i++){
}
// 3.这样整个循环就只会计算一次长度,如果考虑到递减,还可以修改成
for(var i=arr.length; i>0; i--){
}
// 4.上面不使用中间变量并且只需要计算一次长度,如果再考虑到长度永远是一个不小于0的数,并且在JS中0的Boolean值为false,可以进一步修改成
for(var i=arr.length; i ; i--){
}
// 5.考虑到JS中变量声明提升可能的影响,为了消除隐患,再修改为
var i=arr.length;
for(; i ; i--){
}


5、对于with语句,虽然有时会提供快捷,但是也常常会导致不可预料的结果,建议少用,甚至不用:

复制代码 代码如下:


//1.使用with语句
with(obj){
a=b;
}
//2.不使用with语句,和1的情况等价
if(obj.a === undefined){
a = obj.b || b;
}else
{
obj.a = obj.b || b;
}
//3.可能的结果
a = b;
a = obj.b;
obj.a = b;
obj.a = obj.b;


第1部分是使用with语句,第2部分是不使用with语句的等价语句,第3部分则是最终可能的运行结果,如果仅从with语句本身来看,很不容易明白程序实际运行时会发生什么。另外,在使用with语句涉及修改的时候,会有不同步的问题,看下面的代码:

复制代码 代码如下:


var obj = {
person:{
name:'linjisong'
}
};
with(obj.person){
obj.person = {
name:'oulinhai'
};
console.info(obj.person.name); //oulinhai
console.info(name);   //linjisong
}


在这里会不经意间就产生了一个不同步。
6、在return语句返回时需注意:

复制代码 代码如下:


return
{
prop:'value';
}//由于引擎会自动添加分号,这里实际会返回undefined

return {
prop:'value';
}//返回一个对象

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddsgf.html