JS进阶-作用域-块作用域
在ES6之前,JS中的作用域只有全局作用域和函数作用域。ES6引入了块作用域,使得开发和维护都变得更简单,在这里对ES6的块作用域进行简单介绍。
let
// 示例1
for (var i= 0; i<10; i++) {
console.log(i);
}
console.log(i);// 10
// 示例2
for (let i= 0; i<10; i++) {
console.log(i);
}
console.log(i);// Uncaught ReferenceError: i is not defined
在ES5时代,只能使用var定义变量,由于没有块作用域,示例1中的变量i在循环结束后可以在全局作用域中访问,很显然变量i污染了全局作用域。
ES6引入了let关键字定义变量,它可以将变量绑定到所在的任意作用域中,实现块作用域。
块作用域可以代替立即执行函数(IIFE)
(function(){
var i = 1;
})();
console.log(i);//ReferenceError: i is not defined
let不会进行声明提升,并且不能重复声明
console.log(i); // ReferenceError: i is not defined
let i = 1;
const
ES6引入了const关键字定义一个常量,它也可以创建块作用域。修改常量值会引起错误。
const不会进行声明提升,并且不能重复声明
console.log(i); // ReferenceError: i is not defined
const i = 1;
try-catch
在ES6之前的环境中,可以使用try-catch语句创建块级作用域。
// 示例1
try{
throw 1;
}catch(v){
console.log(v); // 1
}
console.log(v); //ReferenceError: v is not defined
// 示例2
try{
throw undefined;
}catch(v){
v = 1;
console.log(v); // 1
}
console.log(v); //ReferenceError: v is not defined
胖胖熊笔记,笔记已迁移