2010-07-14 75 views
99

是否可以在名爲first.js的文件中使用名爲second.js的另一個文件中的變量?我可以從另一個文件訪問變量嗎?

first.js包含一個名爲colorcodes的變量。

+0

你爲什麼不合並它們? – Roki 2010-07-14 08:12:13

+0

@Roki:例如,您可以從其他網站加載數據,而處理它們的腳本位於您的網站上:<腳本src =「second.js」>' – Piskvor 2010-07-14 08:23:20

+0

datasource網站沒有回調? 我的意思: 下載second.js 包含: ... 功能secondscriptFn(O){// 做一些事情/ w的數據; } ... 下載http://datasource.example.net/first.js?callback=secondscriptFn 然後首先包含: secondscriptFn({back:「#fff」,front:「#888」,side: 「#369」}); 由於您可以控制first.js作用域,所以它比全局作用域版本更具可控性和可靠性...... – Roki 2010-07-14 08:43:46

回答

109

正如Fermin所說,全局範圍內的變量應該可以在聲明後加載的所有腳本訪問。您也可以使用window或(在全球範圍內)this的屬性以獲得相同的效果。

// first.js 
var colorCodes = { 

    back : "#fff", 
    front : "#888", 
    side : "#369" 

}; 

...在另一個文件...

// second.js 
alert (colorCodes.back); // alerts `#fff` 

...在HTML文件...

<script type="text/javascript" src="first.js"></script> 
<script type="text/javascript" src="second.js"></script> 
+3

在瀏覽器中,'window' *是全局作用域 - 因此window.colorCodes和(全局)對象colorCodes是同一個對象。 – Piskvor 2010-07-14 08:22:06

+0

真的......我提到它的原因是您需要從非全局範圍設置全局變量的情況。 – 2010-07-14 08:28:37

4

如果您將顏色代碼存儲在全局變量中,則應該可以從任意一個javascript文件訪問它。

+0

你可以請示例代碼? – 2016-06-18 09:23:52

+1

@edwardtorvalds - 查看接受的答案例如 – Fermin 2016-06-20 07:04:43

9

這應該工作 - 定義firstfile一個全局變量並從secondfile訪問它:

<script src="/firstfile.js"></script> 
<script src="/secondfile.js"></script> 

firstfile.js:

var colors = { 
    text:'#000000', 
    background:'#aaaaaa', 
    something_else:'blue' 
}; 

secondfile.js:

do_something_with(colors.background); 

請注意,您在其中加載腳本文件,該命令是用於一些瀏覽器顯著(IE6肯定的,也許其他人)

+1

您可能需要將該變量附加到對象,如:this.colors = colors。如果它是一個對象而不是一個枚舉,你可以創建一個函數來返回值。 this.getTextColor = function(){return colors.text; }; – aggaton 2013-01-20 21:02:55

+0

是的!訂單評論在 – 2013-12-24 23:26:50

+1

上是正確的你將如何更新來自加載頁面的變量? 似乎不起作用。 – v3nt 2016-06-21 16:26:50

3

我碰到amplify.js來了。它使用起來非常簡單。要存儲的值,我們把它稱爲「myvalue的」,你這樣做:

amplify.store("myKey", "myValue") 

並訪問它,你做

amplify.store("myKey") 
5

我不喜歡什麼answer above說不過雖然,它並沒有奏效我

,因爲我是declaring這些變量inside JQuery的$(document).ready()

所以請確保你在<script>標籤內聲明你的變量而不是其他地方

0

我可能會這樣做有點不同。我不確定爲什麼我使用這種語法,很久以前從某本書中複製它。但是我的每個js文件都定義了一個變量。第一個文件,沒有任何理由,被稱爲R:

var R = 
    { 
     somevar: 0, 
     othervar: -1, 

     init: function() { 
      ... 
     } // end init function 

     somefunction: function(somearg) { 
      ... 
     } // end somefunction 

     ... 

    }; // end variable R definition 


    $(window).load(function() { 
     R.init(); 
    }) 

然後,如果我有一個很大的一塊,我想分離,我把它放在一個單獨的文件和不同的變量名稱代碼,但我仍然可以引用R變量和函數。我呼籲沒有很好的理由,在所有新的TD:

var TD = 
    { 
     xvar: 0, 
     yvar: -1, 

     init: function() { 
      ... 
     } // end init function 

     sepfunction: function() { 
      ... 
      R.somefunction(xvar); 
      ... 
     } // end somefunction 

     ... 

    }; // end variable TD definition 


    $(window).load(function() { 
     TD.init(); 
    }) 

你可以看到,其中在TD「sepfunction」我叫R.somefunction。 我意識到這不會提供任何運行效率,因爲這兩個腳本需要加載,但它確實幫助我保持我的代碼組織。

相關問題