2009-08-27 132 views
3

這裏有問題的腳本:範圍JavaScript變量的聲明爲inline

這是從HTML文件:

<script type="text/javascript"> 
    var devices_record = "some string"; 
</script> 
<script type="text/javascript" src="/js/foo.js"></script> 

這是foo.js:

function bar() { 
    devices_record = "assign new string"; 
} 

錯誤報告通過HttpFox是沒有定義devices_記錄。是什麼賦予了?我認爲devices_ record將是一個全局範圍的變量,所以它應該可以從任何地方訪問。

+1

您應該一定能夠訪問devices_record。我認爲你錯過了別的東西。這是確切的代碼還是您已經創建了一個示例來說明問題? – SolutionYogi 2009-08-27 18:16:34

回答

3

您的測試案例適用於我。下面是我完整的測試:

foo.js:

function bar() { 
    alert(devices_record); 
    devices_record = "assign new string"; 
    alert(devices_record); 
} 

foo.html:

<html> 
<head> 
    <script type="text/javascript"> 
    var devices_record = "some string"; 
    </script> 
    <script type="text/javascript" src="foo.js"></script> 
</head> 
<body onload="bar()"> 
</body> 

我得到兩個警報,第一個說"some string",第二"assign new string"

你的問題存在於你的代碼的其他地方。

+0

你說得對。這個問題在代碼中的其他地方確實存在。謝謝。 – 2009-08-31 16:37:07

0

聲明devices_record in foo.js。然後,從嵌入HTML的JavaScript中引用它。

您也可以考慮在一類包裝您的foo.js代碼,與devices_record作爲一個字段/屬性。這可以使得更容易的錯誤陷阱等等。

珍聞:另外,如果devices_record聲明放在腳本包含之前,那麼腳本可以訪問它。但是,要小心在使用它們的文件之外聲明變量。如果您決定將該腳本包含在忘記聲明devices_record的頁面中,則會遇到錯誤。

1

我相信你的代碼有效。至少執行上面給出的代碼不會導致任何錯誤。

此外,最好在使用任何內聯js之前包含您的依賴項,如foo.js。這可確保您的庫在調用庫提供的函數之前加載。

此外,賦值運算符不會導致'devices_ record is not defined'錯誤,因爲您正在使用賦值運算符定義它。

您的錯誤可能是由其他原因引起的。

+0

關於作業的好處。顯示提問者正在省略產生錯誤的實際代碼。 – 2009-08-27 18:39:03