2011-08-12 20 views
0

我想組織我的JavaScript,所以我想我會做一個功能JS文件。無論如何,我可以從調用functions.js的功能嗎?從單獨的腳本調用JavaScript函數?


編輯

functions.js:

var get_selects; 
get_selects = { 
    getLanguages: function() { 
    } 
} 

global.js:

get_selects.getLangueges(); 
+0

如果'functions.js'中的函數是全局函數,則可以從'global.js'但要確保按照正確的順序包含腳本:1. functions.js,2. global.js。但是,我建議你不要**定義全局函數 - 這會污染全局名稱空間(不必要地)。更好的選擇是擁有一個全局對象 - 比如「PHIL」 - 然後將這些函數定義爲該對象的成員。 –

+0

儘量不要在這裏迂腐,但它不工作......你說的不準確,只是可能。如果在加載functions.js之前,global.js會嘗試調用functions.js中定義的任何東西,那麼會出現錯誤,但除此之外,您可以按照您感覺的順序加載它們,因爲JS不是靜態語言。一般來說,你是對的,但是隨着DOM準備瘋狂,這種「邊緣」情況並非如此「邊緣」。 – coreyward

+0

@coreyward,你建議我不要對決腳本嗎? – Phil

回答

4

是的。除非像使用經驗豐富的JS開發人員那樣使用閉包,否則函數將在全局範圍內自動提供。這是javascript的一個不好的部分。

做一個不那麼糟糕的做法是將你的函數包裝到一個單獨的對象中,這樣你就不會用大量可能不相關的函數來污染全局範圍。

var utils; 
utils = { 
    its_a_trap: function(enemy){ 
    alert(enemy + ' is coming!'); 
    }, 

    foobar: function(){ return 1 + 1; } 
} 

utils.its_a_trap('Rebecca Black'); 
utils.foobar(); 
+0

這讓我發笑。 +1 –

+0

您能否詳細說明「使用閉包」,您是否建議不要分離腳本? – Phil

+1

當然:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – coreyward

0

如果兩個腳本已包含在相同的HTML文件,當然,這將制定出的框。最好的方法是嘗試一下。

0

所有.js文件都將頂級函數加載到全局名稱空間中。所以,是的。

0

簡單地調用它像任何其它的功能

yourFunctionName(yourFunctionParams); 

知道,你需要包括你的functions.js你global.js之前,要不然也不會看到你的功能。

+0

不正確,但如果在加載functions.js之前global.js嘗試調用functions.js中定義的任何內容,則會出現錯誤。一般來說,你是對的,但是隨着DOM準備瘋狂,這種「邊緣」情況並非如此「邊緣」。 – coreyward

0

從您在HTML文件中包含JS的那一刻起,所有功能都可用。所以,如果你作出這樣,它會工作:

<script type="text/javascript" src="functions.js"></script> 
<script type="text/javascript" src="global.js"></script> 

但是(只要我知道),你必須包括「functions.js」之首。否則,「global.js」將無法找到呼叫。您也可以使「global.js」裏面的小功能,包括對飛「functions.js」,像這樣:

function include(js_path){ 
    //By Fabrício Magri e Micox 
    //http://elmicox.blogspot.com/2006/12/include-em-javascript.html 
    var new= document.createElement('script'); 
    new.setAttribute('type', 'text/javascript'); 
    new.setAttribute('src', js_path); 
    document.getElementsByTagName('head')[0].appendChild(new); 
} 

比,你的「global.js」的開始調用此函數在瀏覽器請求「global.js」時儘快在該部分包含「functions.js」的內容