Lostthewind 2019-09-08
在JavaScript编程中,当我们使用关键字var时,该变量是在距离最近的函数内部或是在全局词法环境中定义的,即函数作用域。这是JavaScript由来已久的特性,{}并不一定限制变量作用域的模式也困扰了许多从其他语言转向JavaScript的开发者。
随着前端工程的发展壮大ECMA也感觉JavaScript对于编写大型项目来说有些力不从心和不可编织的复杂度。于是ECMA吸纳了许多语言的优点并融入新版本的ES规范。
其中就包括定义块级作用域的关键字:const let
{ { let as = 1; as = 2333; } function look(){ console.log(as); } // look();//R...Error }
try{ throw undefined }catch(v){ try{ throw 1 }catch(as){ as = 2333; } function look(){ console.log(as); } // look();//R...Error }
{ { let a = 1; let b = 2; a = 2333; b = 444; } function look(){ console.log(a); } // look();//R...Error } //=>> try{ throw undefined }catch(__e__){ try{ throw {a:1,b:2} }catch(_$$scope$$_){ with(_$$scope$$_){ a = 2333; b = 444; } } function look(){ console.log(a); } // look();//R...Error }
;(function(){ (function(){ var as = 1; as = 2333; })(); function look(){ console.log(as); } look();//R...Error })();