一,block语句
block块语句,用一对花括号表示{}.
在ES5中,没有块级作用域
for(var i=0;i<5;i++){
....
}
中,变量i其实是一个全局变量,不是在本次循环中才访问得到。
但是在ES6增加了let语句,用来声明一个块级变量,作用于let所在的代码块
下面再详细说明var声明和let声明的区别
二,var声明语句
var语句用于声明一个变量。
但是存在几个坑:
1.在函数作用域中声明像这样
function fn(){
var a = b = 1;
}
相当于隐式声明了一个全局变量b。
2.存在变量提升
就是一个变量a未声明之前就调用的话,会发现a的值为 undefined ,不会发生错误
与let声明的区别:
1.不存在变量提升。ES6规定,凡是用let或const声明的变量,就会绑定在所在的作用域中,凡是在声明之前使用它,都会报错。
三,try catch语句
try-catch语句主要是用来捕获错误的。
try{
...
}catch(ex){
...
}finally{
...
},ex表示错误
这是该语句的正常结构。
当然也有变种,可以是try后面必须跟一个,可以是catch或finally。
甚至,还可以嵌套
嵌套是有两种情况要注意,
1.try{
try{
throw new Error('oops');
}finally{
console.log('finally');
}
}catch(ex){
console.error('outer',ex.message);
} 会输出//'outer','oops' 然后才是'finally'
2.try{
try{
throw new Error('oops')
}catch(ex){
console.log('outer',ex.message)
throw new Error('opps2')
}finally{
console.log('finally')
}
}catch(ex){
console.log('inside',ex.message)
}
这种情况,会输出
//outer
//opps
//finally
//inside
try-catch语句不管真假,判断真假应该用if语句。
可以用来处理浏览器的兼容性。