亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js訪問函數作用域外部同名變量

js訪問函數作用域外部同名變量

MM們 2018-09-06 09:09:52
(function(){     var A = 20;     function canReadA(){         console.log(A);     }     function cannotReadA(){         if(false){             var A = 10;         }         console.log(A);     }     canReadA();     cannotReadA();}());有什么辦法能夠在cannotReadA()中訪問到A=20的那個變量?除了換一個變量名,或者聲明一個外部的命名空間,還有什么方法能夠直接做到?比如能不能在當前作用函數域中把這個變量的存在取消掉?
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

(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();}());


查看完整回答
反對 回復 2018-09-28
  • 1 回答
  • 0 關注
  • 841 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號