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
})();
相关文章
相关标签/搜索