2009-08-24 61 views
2

只要我從jquery $()。ready()中調用我的javascript代碼;函數不應該有權訪問我的JavaScript代碼中聲明的所有變量?javascript的順序在頁面中是否重要?

我有來自.js文件和內聯的代碼。

我試圖訪問一個變量,它說它沒有定義,但是當我做一個視圖源時,我可以看到這個變量。

+0

請點擊這裏。有一個答案,這解釋了很多http://stackoverflow.com/questions/7609276/javascript-function-order-why-does-it-matter – iveetoo 2013-08-23 12:15:28

回答

4

您不一定有權訪問該變量。這實際上取決於變量的範圍以及相對於其使用位置的地方。如果該變量是在單獨的ready()塊中定義的,則即使該變量在全局空間中,但如果該準備好的塊在引用它的那個之後運行,也可能無法訪問該變量。爲了可用,定義變量的代碼需要在引用它的代碼之前執行,並且它需要位於相同的範圍內。

+0

+1更多信息:http://docs.jquery.com/Events /就緒#FN – ATorras 2009-08-24 15:58:03

0

是的,你可以訪問所有的頂級變量。但是你正在尋找的那個可能是使用dom ready事件定義的,即使它是一個窗口變量,處理程序可能會在你的後面被觸發。或者它在動態注入的JavaScript文件中。

1

不,您應該總是按照需要的順序加載Javascript。如果您使用的是一些jQuery插件,那麼您應該在這些插件之前加載jQuery,因爲它們可能會在您不知情的情況下實例化使用jQuery對象的某些內容。

對於我的web應用程序,我加載JavaScript的以下順序:

  • 外部庫(jQuery的,原型,ExtJS的)
  • 插件,建立過這些庫的
  • 我定製的JavaScript

我希望我的回答很有幫助。

1

你是對的,訪問其他文件中的變量應該沒有問題。範圍或簡單的拼寫錯誤可能存在問題。您嘗試訪問的變量的範圍是什麼,以及您嘗試使用它的範圍?

4

JavaScript的順序確實很重要。 JavaScript是在頁面內的線性方式執行,所以如果你有兩個<script>標籤是這樣的:

<script src="test1.js"></script> 
<script src="test2.js"></script> 

test1.js將被加載並首先運行,然後test2.js。在test1.js中全局聲明的任何內容都可以在第二個腳本中訪問,但不能以其他方式訪問。

這樣做的副作用是,腳本也在加載時,如果test1.js花了很長的時間來加載,你會看到減慢頁面加載時間。這就是爲什麼建議在頁面底部放置任何不是必須的JavaScript,以便在JavaScript加載速度降低之前幾乎整個事情都會顯示出來。

在jquery中的「準備就緒」事件中,理論上你應該可以訪問任何作爲DOM一部分加載的東西,因爲在DOM結構完全構建之前,這在技術上應該不會觸發。

0

您可以在頁面的任何部分設置變量值,但在函數代碼之前將它們聲明在頁面的頂部會更容易。

Josh