1. ES3 块级作用域
ES3的with语句,try__catch语句的catch子句在执行时自动创建一个块级作用域。
var obj = {
name: "obj";
}
var name = "global";
function test() {
var name = "local";
/*创建一个块级作用域,对象的属性作为块级作用域Block的属性,内部会有
一个对象属性与Block属性的映射关系,保证两边同步修改,但是如果Block中
不存在这个变量(对象属性)时,会沿着词法作用域链向上查找,如果找不到,
会创建一个暗示全局变量,ES5严格模式已经禁止使用with语句。
*/
with(obj) {
console.log(name);//Block块上的name
age = 30 //创建暗示全局变量
}
}
2. ES6 块级作用域
使用{}声明一个语句块,并使用let语句劫持这个块,才会创建块级作用域。