首先最基础的块语句(block语句),组合0-多个语句,块语句用一对花括号定义。(注意:没有块级作用域)。
var语句,声明语句,var a =b =1;这样创建,a是局部变量,b是全局变量,var a=1,b=1;这样声明都是局部变量。
其次就是try-catch语句,有三种,1,try和catch。2,try和finally3,try和catch与finally都有。
try-catch提供异常捕获机制,执行的流程是,先执行try块中的代码,如果抛出异常,由catch重句捕获并执行,如果没有异常,catch中的代码会忽略掉,不管有没有最后都会执行finally从句,try后面必须接着一个tcatch或者finally,所以有了三种情况。
例子:try{
//do sth
}finall{
console.log("finally);
}
(不管有没有异常都会执行finally的内容)
当try-catch嵌套时:
1,
try{ try{ throw new Error("oops"); } finally{ console.log("finally"); } } catch(ex){ console.error("outer",ex.message); }
里面的没有catch,它会跳到最近的catch处理,在跳出之前会执行finally,所以执行顺序为:“finally”,"outer""oops"。
例子二
try{ try{ throw new Error("oops"); } catch(ex){ console.error("outer",ex.message); } finally{ console.log("finally"); } } catch(ex){ console.error("outer",ex.message); }
还是内外两层嵌套,这个在内层,加上了catch语句,那么抛出opps异常,抛出后首先执行内部的catch块,"inner""opps","finally",
例子三
try{ try{ throw new Error("oops"); } catch(ex){ console.error("inner",ex.message); throw ex; } finally{ console.log("finally"); } } catch(ex){ console.error("outer",ex.message); }
和例子二相比,内部的catch(ex)里面还可以抛异常,但还是会先抛"opps",然后在由内部的inner来处理,最后执行finally,但是要注意的是,这个catch里面又抛出异常,在finally执行之后又会执行outer oops,
即顺序如:"inner" "opps"
"finally"
"outer" "opps"
如果内部的异常没有处理抛给外面了,在外面处理之前,要先执行finally语句。
函数语句 :函数声明和函数表达式
使用function关键字来声明,后跟一组参数以及函数体。
函数声明和函数表达式,很多区别,最主要的区别函数声明会预先处理,也叫做函数前置。所以在函数前面是可以调用的。函数表达式就不可以。
相关小结:对于参数的理解,无需指定函数的返回值,因为ECMAscript在任何时候返回任何值。
实际上,未指定返回值的函数返回的是特殊的underfined。
ECMAscript没有签名的概念,因为某函数参数是以一个包含零或多个值得数组的形式传递的,ECMAscript函数不能重载。