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
})();
相關文章
相關標籤/搜索