ES3/5模擬實現ES6塊級作用域方式探究

簡述

在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
})();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章