原来竟然还有这种局部变量!

我们知道,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对象里。

先写这么多吧。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/linweinb/p/8287032.html