在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 })();