2016-11-13 385 views
0

我有三個腳本文件。 main.js,script1.js,script2.js。如何在不同的JS文件之間共享相同的作用域變量

的main.js只包括腳本到文檔:

function IncludeJs(sFileName) { 
    document.writeln('<script type="text/javascript" src="' + sFileName + '"></script>'); 
} 

IncludeJs("../script1.js"); 
IncludeJs("../script2.js"); 

的script1.js和script2.js代碼下相同的命名空間。

script1.js:

var sharedNamespace = sharedNamespace || {}; 

(function() { 

    "use strict"; 

    function func1(){ 
     .... 
    } 

}).apply(sharedNamespace); 

script2.js:

var sharedNamespace = sharedNamespace || {}; 

(function() { 

    "use strict"; 

    function func2(){ 
     return func1(); 
    } 

}).apply(sharedNamespace); 

的FUNC2不工作,因爲FUNC1是不確定的。我怎樣才能把script1.js和script2.js放在與共享變量相同的作用域下?

sharedNamespace.func1 = function(){}的解決方案,是最差我,因爲我不希望公開此功能的客戶端誰用我的圖書館......

+1

這是不可能的,提出的要求。您或者需要向每個人公開該功能,或者您需要一個腳本。沒有辦法讓一個函數既是私有的又是用一個不同的腳本共享的。 – vlaz

+0

[javascript - 從原型定義的函數訪問私有成員變量]的可能重複(http://stackoverflow.com/questions/436120/javascript-accessing-private-member-variables-from-prototype-defined-functions) – yuvi

回答

5

...我不希望公開這功能給客戶誰使用我的圖書館...

如果你打算有單獨的腳本文件,你希望他們定義相互調用的函數,你別無選擇。 script1.jsscript2.js共享一個通用範圍是不可能的,該範圍對頁面上的其他腳本不可訪問。

相反,您可能希望將用於開發的獨立文件組合起來進行部署,因爲單個腳本可以(當然)具有私有信息。 (私人除非用戶編輯腳本,當然)。

因此,舉例來說,你可能有這樣的事情:

script1.js

var internal = internal || {}; 
(function(i) { 
    i.func1 = function func1() { 
     // ...code here, possibly using i.func2() 
    }; 
})(internal); 

script2.js

var internal = internal || {}; 
(function(i) { 
    i.func2 = function func2() { 
     // ...code here, possibly using i.func1() 
    }; 
})(internal); 

在開發時,你需要單獨包含它們,所以任何代碼都可以使用internal.func1。但後來做你的所有功能於一身的腳本編譯的時候,你就會有它包裹

(function() { 
    // ...contents of script1.js here... 
    // ...contents of script2.js here... 
})(); 

現在,internal是專用於合併腳本。

這是我的頭頂;有可能不那麼繁瑣的方法...

+0

Great !謝謝T.J –

相關問題