2013-01-10 28 views
4

我幾乎不熟悉Web開發,我正面對Javascript/jQuery。我想了解腳本是如何在html頁面中執行的。我是一名C/Java程序員,參考這些語言可以幫助我。 我明白,如果我們想在加載頁面後執行腳本,可以將腳本插入到標題或主體的末尾。我知道一個函數可以被DOM事件調用(我將事件與中斷信號相關聯)。執行在身體或頭部元素JavaScript或jQuery腳本或插件的生命週期

<script type="text/javascript"> 
//<![CDATA[ 
var i=10; 
if (i<5) 
    { 
    // some code 
    } 
//]]> 
</script> 

只有一次或連續執行:如果這樣的劇本我想知道的是。 jQuery的行爲與Javascript相同嗎? 插件怎麼樣?他們是否一直活着一個頁面顯示(像一個並行線程),或者他們是事件驅動(他們通過點擊/調整大小等或使用計時器)? 我知道這是一個非常普遍的問題,可能它不能用幾行解釋,但一些基本的解釋和一些文檔的鏈接將非常感激。

謝謝!

回答

5

jQuery只是一個用JavaScript編寫的庫,主要簡化DOM操作並處理AJAX請求。如果您想了解JS如何工作,請暫時忘掉jQuery。

關於腳本執行:瀏覽器解析HTML並從中創建一個DOM。當瀏覽器遇到<script>標籤及其內容時,它會爲它創建一個DOM元素,並將其添加到樹中並執行代碼。然後繼續解析下一個標籤,這意味着代碼只執行一次。
在解析過程中執行腳本的原因是腳本已經可以馬上處理HTML(例如使用document.write(雖然不是很好的做法)),因此可以改變解析器必須解析的內容。腳本執行可以使用defer attribute推遲,直到文檔完全解析(直到現在,我還沒有在活動代碼中經常看到該屬性)。

所有script標籤共享相同的作用域,全局作用域和執行環境會一直存在,直到您離開或重新加載頁面。因此,在一個腳本中定義一個變量並在另一個腳本中訪問它是完全有效的,事實上,當您在頁面中包含像jQuery這樣的庫時,您正在做的是什麼。

<script> 
    var foo = 'bar'; 
</script> 
<!-- other HTML code --> 
<script> 
    alert(foo); 
</script> 

您可能會發現HTML documentation about scripts很有幫助。

+0

該腳本可以修改DOM而不使用'document.write' –

+0

@JuanMendes:是的,但是這並不影響解析器。您只能修改已經解析的內容。這就是爲什麼我說「HTML」而不是「DOM」。 –

+0

所有的答案在哪裏都有用,但是你也發現了問題,因爲你也談到了範圍。 另一個問題,如果我會寫這樣的(以適當的方式): 執行會被阻塞在這個js上還是頁面會被並行加載的時候處理器是否免費? – Alain1405

3

腳本將從頭到尾執行一次,就像您在頁面中加載的任何內容一樣。然而,部分加載將與DOM(文檔對象模型,或瀏覽器的網頁內部表示)交互,包括註冊事件處理程序等。此後諸如點擊,AJAX響應等事件可以觸發JS功能。

如果您習慣了Java UI開發,那麼回調和基於事件的編程對您來說將是熟悉的;如果你習慣了程序編碼,那麼它會有一點學習曲線。

2

上面的代碼只會執行一次。

jQuery是基於javascript的,當然,它的行爲與javascript相同。 jQuery使JavaScript更容易,並且還處理瀏覽器特定的問題。

如果在您的示例中編寫JavaScript代碼,則它會在運行時執行,但它也可能是事件驅動的。代碼結果的生命週期一直保留,直到刷新瀏覽器頁面。如果您使用定時器,JavaScript的生命週期也可能是連續的。

1

一些腳本只是創建函數和對象,以後可以通過事件調用,一些腳本實際上在頁面加載時對DOM做了一些事情,一些腳本只是註冊監聽器。

jQuery及其插件只是創建事件處理程序稍後可以調用的對象/函數。