簡述
在JavaScript編程中,當我們使用關鍵字var時,該變量是在距離最近的函數內部或是在全局詞法環境中定義的,即函數作用域。這是JavaScript由來已久的特性,{}並不一定限制變量作用域的模式也困擾了許多從其他語言轉向JavaScript的開發者。
隨着前端工程的發展壯大ECMA也感覺JavaScript對於編寫大型項目來說有些力不從心和不可編織的複雜度。於是ECMA吸納了許多語言的優點並融入新版本的ES規範。
其中就包括定義塊級作用域的關鍵字:const let
ES6塊級作用域
{
{
let as = 1;
as = 2333;
}
function look(){
console.log(as);
}
// look();//R...Error
}
如何用低版本模擬: try catch
try{
throw undefined
}catch(v){
try{
throw 1
}catch(as){
as = 2333;
}
function look(){
console.log(as);
}
// look();//R...Error
}
如何用低版本模擬: try catch + with加強版
{
{
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
})();