我有幾個大的js文件,它們的功能和對象都居住在全局範圍內,並且在它們之間有函數調用。是否有一種相對簡單的方法將它們置於本地範圍之內。把幾個.js文件放在一個示波器下
<script src="fileA.js"></script>
<script src="fileB.js"></script>
<script src="fileC.js"></script>
我試圖把(function(){
在文件的開頭和})();
在最後一個結束,但它不工作。
10x爲您的親切幫助BR
我有幾個大的js文件,它們的功能和對象都居住在全局範圍內,並且在它們之間有函數調用。是否有一種相對簡單的方法將它們置於本地範圍之內。把幾個.js文件放在一個示波器下
<script src="fileA.js"></script>
<script src="fileB.js"></script>
<script src="fileC.js"></script>
我試圖把(function(){
在文件的開頭和})();
在最後一個結束,但它不工作。
10x爲您的親切幫助BR
不,沒有。
最接近的可能是將它們設置爲通過命名空間共享變量(一個單一的全局變量,名稱選擇爲使碰撞不太可能),如window.YOUR_SCRIPT_NAME = {}
。
你不能像這樣包裝它,因爲每個腳本仍然分開解析(<script>
標記不通過將內容包含到文件中而不起作用)。
您可以簡單地手動連接文件,將function(){ ... }()
放在整個內容周圍,並將這個新連接的腳本作爲一個單元使用。
如果重寫腳本的內容是可行的,你可以讓他們使用工廠方法給予他們的共享範圍,如在其他答案中提到的Quentin。然而,更好的解決方案(如果你可以重寫,如果這是一個更大的項目)將切換到一個完整的模塊概念與依賴關係,如AMD。
不使用腳本src =「fileA.js」,可以使用Ajax將fileA.js的內容作爲字符串獲取。比評估你的本地範圍。
eval.call(yourlocalscope, string)
儘管這樣做有效,但如果文件相互依賴且必須按順序執行,則會帶來很多額外的複雜性。它還會導致調試變得更加困難(除非您使用某些只有某些瀏覽器支持的magic @ // @ source'註釋給賦值字符串命名)。如果你想異步加載,最好切換到require.js或其他處理所有事情的東西。 –
感謝這是一個有用的解決方案+1在我的情況下,我正在尋找一些相對無痛苦,容易的東西。 – kidwon
10x爲您的想法,他們是有幫助的。就AMD而言,我已經有了這個解決方案,這是一個非常大的項目,對於這種情況,它不起作用。感謝您的善意幫助 – kidwon