原来竟然还有这种局部变量!
我们知道,ES5只有函数作用域,可以利用函数来隐藏“信息”,把需要暴露的信息“最小化”,成为“最小特权原则”。
但昨天看到其实还有另一种局部变量,从ES3时代就有了,这就是catch(error)中的error变量(即错误变量)只能在catch块中访问,外面访问不到。
try{ console.log(a); } catch(error){ console.log(error); // ReferenceError: a is not defined } // 在catch块外部访问error console.log(error); // 错误!
但在catch块内部(即花括号内部)var声明的变量依然属于全局变量,外部依然可以访问。
try{ console.log(a); } catch(error){ var b="lala"; } // 外部访问变量b console.log(b); // lala console.log(window.hasOwnProperty("b")); // true
可见,在catch块花括号里声明的变量依然正常被当作全局变量被添加到window对象里。
先写这么多吧。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。