前言
上一章我们介绍到,javascript中的作用域就像一个个小“气泡”,而函数作用域就是其中的一种产生方式,每声明一个函数都会为其自身创建一个气泡,属于这个函数的全部变量都可以在整个函数的范围内使用及复用,这一章我们将介绍javascript作用域的另一种小“气泡”,块作用域
正文
块作用域
在ES6之前,除 JavaScript 外的很多编程语言都支持块作用域,因此其他语言的开发者对于相关的思维方式会很熟悉,但是对于主要使用 JavaScript 的开发者来说,这个概念会很陌生。我们还是以一个例子来理解块作用域的意义
for (var i = 0; i < 10; i++) {
console.log(i);
}
这里的本意本应该是在for循环内使用i,但是i却被绑定在了全局或者外部作用域上,所以为什么要把一个只在for循环中使用的变量污染到全局作用域下呢,如果存在块作用域使得i只在for的内部使用而不污染到全局,对保证变量不会被混乱地复用及提升代码的可维护性都有很大帮助。下面我们就来进一步研究javascript中怎么生成一个块作用域
with
with不仅是一个难于理解的结构,同时也是块作用域的一个例子(块作用域的一种形式),用 with 从对象中创建出的作用域仅在 with 声明中而非外部作用域中有效。
try/catch
非常少有人会注意到 JavaScript 的 ES3 规范中规定 try/catch 的 catch 分句会创建一个块作用域,其中声明的变量仅在 catch 内部有效。
try {
undefined(); // 执行一个非法操作来强制制造一个异常
}catch (err) {
c