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
优秀文章首发于聚享小站,欢迎关注!
原文地址:https://www.cnblogs.com/yesyes/p/15351954.html