2012-03-12 84 views
1

例如,假設我有我的HTMLJavaScript的範圍界定如何工作?

<script src="/socket.io/socket.io.js"></script> 

腳本定義了一個名爲插座變量中的以下。下面緊接着我有以下

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

內的script.js我嘗試訪問插座,並得到一個沒有定義的錯誤。但是,如果我使用內聯腳本,我可以訪問該變量。我如何從script.js中訪問'套接字'?

+0

您正試圖在socket腳本尚未加載時訪問該變量。使用'$(document).ready()'或其他東西。 – Manishearth 2012-03-12 11:58:29

+0

'socket.io.js'的代碼是什麼? – 2012-03-12 12:02:22

+0

如果這是socket.io,它會導出一個名爲'io'的變量,但不會有一個名爲socket的變量。 – wds 2012-03-12 13:42:09

回答

2

JavaScript本身沒有「包含」。

在一個JS文件的頂層聲明的任何變量將在全局範圍該文件被加載後立即,即是可在使用<script>標籤的點。

請注意,在<script>標記上加載了defer屬性的腳本可能不會立即加載,因此其中聲明的任何變量將不會立即可用。

宣佈與var關鍵字一個回調函數變量不出現在全球範圍內。因此,在這個代碼:

var a = 1; 
$(document).ready(function() { 
    var b = 1; 
}); 

a將在全球範圍內,但b不會。

而在此代碼:

$(document).ready(function() { 
    c = 1; 
}); 

c在全球範圍內(因爲它沒有與var關鍵字聲明),但直到回調函數被調用

0

你在哪裏定義這些腳本?他們在標籤上嗎?如果是這樣,您應該能夠訪問腳本之間的變量...