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

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

我聽說全局變量不好,我應該使用什么替代方案?

我聽說全局變量不好,我應該使用什么替代方案?

慕村9548890 2019-06-21 17:37:04
我聽說全局變量不好,我應該使用什么替代方案?我讀遍了所有的地方全局變量不好而且應該使用其他方法。特別是在Javascript中,我應該選擇什么樣的解決方案。我在想一個函數,當給出兩個論點時function globalVariables(Variable,Value))查看本地數組中是否存在變量,如果它確實將其值設置為Value否則,Variable和Value都是附加的。如果函數是在沒有參數的情況下調用的(function globalVariables())返回數組。如果函數只使用一個參數觸發(function globalVariables(Variable))返回Variable在數組中。你認為如何?我想聽聽你關于使用全局變量的替代解決方案和論點。你會如何使用globalVariables();function append(){     globalVariables("variable1","value1"); //globalVariables() would append variable1 to it's local array.};function retrieve(){     var localVariable1 = globalVariables("variable1"); //globalVariables() would return "value1".};function retrieveAll(){     var localVariable1 = globalVariables();      //globalVariables() would return the globalVariable()'s entire, local [persistently stored between calls] array.};function set(){     globalVariables("variable1","value2"); //globalVariables() would set variable1 to "value2".};這是一個單例模式順便說一句?在這個特定的場景中,一個函數可能在某個時間點設置一個變量,而稍后另一個函數(可能在用戶提交表單時)需要得到該變量。因此,第一個函數不能將變量作為參數傳遞給后一個函數,因為從第一個函數開始就不會調用它。謝謝你,謝謝你的幫助!
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

javascript中不鼓勵全局變量的主要原因是,在javascript中,所有代碼共享一個全局命名空間,而且javascript有隱含的全局變量,即。未在本地范圍中顯式聲明的變量將自動添加到全局命名空間中。過多地依賴全局變量會導致同一頁上不同腳本之間的沖突(請參閱道格拉斯·克羅克福德的文章).

減少全局變量的一種方法是使用YUI模塊模式..基本思想是將所有代碼包裝在一個函數中,該函數返回一個對象,該對象包含需要在模塊之外訪問的函數,并將返回值分配給單個全局變量。

var FOO = (function() {
    var my_var = 10; //shared variable available only inside your module

    function bar() { // this function not available outside your module
        alert(my_var); // this function can access my_var
    }

    return {
        a_func: function() {
            alert(my_var); // this function can access my_var
        },
        b_func: function() {
            alert(my_var); // this function can also access my_var
        }
    };})();

現在,要在其他地方使用模塊中的函數,請使用FOO.a_func()..以這種方式解決全局命名空間沖突,只需更改FOO.


查看完整回答
反對 回復 2019-06-21
?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

全球狀態在幾個方面造成了問題。一個是代碼重用。當您訪問某種全局狀態時,這意味著組件必須知道它的環境(它本身之外的東西)。您應該盡可能避免這種情況,因為它會使組件不可預測。

假設我有一個訪問您的globalVariable函數的對象,我想在另一個頁面中使用它。我如何知道如何定義globalVariable對象,甚至如何定義它?但是,如果您可以將信息傳遞給構造函數或作為參數傳遞給函數,那么我可以很容易地確定對象需要什么。

此外,當您訪問或修改全局范圍時,可能會影響其他對象。這就是為什么像jQuery這樣的庫在全局范圍內只使用一個名稱(最不可能)。它減少了與其他庫發生沖突的可能性。換句話說,全局范圍超出了您的控制范圍,因此是危險的。


查看完整回答
反對 回復 2019-06-21
  • 3 回答
  • 0 關注
  • 1127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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