js访问函数作用域外部同名变量

(function(){
    var A = 20;
    function canReadA(){
        console.log(A);
    }

    function cannotReadA(){
        if(false){
            var A = 10;
        }
        console.log(A);
    }
    canReadA();
    cannotReadA();}());

有什么办法能够在cannotReadA()中访问到A=20的那个变量?除了换一个变量名,或者声明一个外部的命名空间,还有什么方法能够直接做到?比如能不能在当前作用函数域中把这个变量的存在取消掉?


MM们
浏览 830回答 1
1回答

收到一只叮咚

(function(){     var A = 20;     var getOuterA = function(){         return A;     };     var setOuterA = function(newVal){         A = newVal;     };     function canReadA(){         console.log(A);     }     function cannotReadA(){         if(false){             var A = 10;         }         //console.log(A);         console.log(getOuterA());         setOuterA(5);         console.log(getOuterA());     }     canReadA();     cannotReadA();}());请借助函数访问,切不可用另一个回答中的this.A=A;方法,这样会创建一个全局的A变量,而且在strict模式下是会报错的。随意地创建全局变量,是很不负责、危险的行为。再更新一个更舒服的方法(function(){     var A = 20;     //使用es5的 getter/setter     var outerScope = {         get A(){             return A;         },         set A(val){             A = val;         }     };     function canReadA(){         console.log(A);     }     function cannotReadA(){         if(false){             var A = 10;         }         //console.log(A);         console.log(outerScope.A);         outerScope.A = 5;         console.log(outerScope.A);     }     canReadA();     cannotReadA();}());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript