2014-10-11 42 views
2

我是javaScript的新手,幾天前開始學習它。所以我正在學習功能和 我讀過的大部分教程都說函數應該放在head標籤中的script標籤中,以便它們可以先裝入。那是什麼意思 ?因爲我寫了這個代碼在javascript中加載函數

<!DOCTYPE html> 
<html> 
<body> 
<p id="demo"></p> 

<script> 
function1(); 
function function1() { 
document.getElementById("demo").innerHTML="HEY"; 
} 
</script> 
</body> 
</html> 

和代碼工作。事情是我不明白如何。你怎麼能調用一個尚未「加載」的函數呢?瀏覽器是否以不同於HTML文檔其餘部分的方式讀取腳本標記?任何人都可以解釋它是如何工作的?

+1

http://stackoverflow.com/q/1013385/3492895,http://stackoverflow.com/a/336868/3492895,認爲這應該回答你的問題 – Winestone 2014-10-11 08:59:38

+0

也腳本不必被放在頭上標籤:http://stackoverflow.com/q/436411/3492895 – Winestone 2014-10-11 09:03:50

+0

非常感謝鏈接的傢伙,我很抱歉,我問了一個問題之前問過。 「 – Dvorog 2014-10-11 09:08:05

回答

1

你的編碼方式是正確的腳本必須在底部

據雅虎的最佳加快您的網站

認沽腳本在底部標籤做法:的javascript由 腳本引起的問題是它們會阻止並行下載。 HTTP/1.1 規範建議瀏覽器每個主機名並行地下載不多於兩個的 組件。如果您從 多個主機名提供圖像,則可以在 並行中獲得兩個以上的下載。然而,當腳本正在下載時,瀏覽器將不會啓動任何其他下載,即使是在不同的主機名上。在某些 的情況下,將腳本移動到底部並不容易。例如,如果對於 示例,腳本使用document.write插入頁面的部分內容,則不能在頁面中移動較低的內容。可能還有 範圍問題。在許多情況下,有辦法解決這些問題。經常出現的另一個建議是使用 延遲腳本。 DEFER屬性指示腳本 不包含document.write,並且它是瀏覽器的一條線索,表明它們可以繼續呈現。不幸的是,Firefox不支持DEFER 屬性。在Internet Explorer中,該腳本可能會延遲,但不會根據需要推出 。如果腳本可以延期,也可以將 移動到頁面的底部。這會讓你的網頁加載速度更快。 頂部|討論這個規則

來源:Best Practices for Speeding Up Your Web Site

據谷歌Apps腳本最佳實踐

加載JavaScript的最後。許多Web開發人員建議在頁面的底部加載JavaScript代碼以提高響應速度,這對於HTML服務來說更爲重要,即 。在NATIVE沙盒模式下,您加載的所有腳本都會被掃描並清理到客戶端,這可能需要幾秒鐘的時間。將標籤移動到頁面的末尾將使HTML內容在處理JavaScript之前呈現,從而允許您向用戶展示微調器或其他消息。

來源:(不僅是headLoad JavaScript last

變量和函數Hoisting in JavaScript

<script> 

function function1() { 
    document.getElementById("demo").innerHTML="HEY"; 
} 

function1(); 
</script> 
+0

」所有主流瀏覽器都支持defer屬性。「 - http://www.w3schools.com/tags/att_script_defer.asp :) – Winestone 2014-10-11 09:19:03

+0

W3school很糟糕,請不要使用它http://www.w3fools.com/請使用https://developer.mozilla.org/en-美國/ – 2014-10-11 09:20:52

+0

https://developer.mozilla.org/en/docs/Web/HTML/Element/script#Browser_compatibility,似乎與我相兼容 – Winestone 2014-10-11 09:25:53

1

這主要是一個優化的事情,script標籤可以放置在很多地方。在過去,它們被放置在body的末尾以優化頁面的加載,因此瀏覽器可以在解析JavaScript之前顯示頁面,因此頁面顯得更加響應。現在

,JavaScript是一般放置在一個單獨的文件,並建議將它們放在head和使用或者添加一個asyncdefer標籤他們(你不能asyncdefer內嵌的JavaScript)。

聲明等的函數:

myFuncName(); //Valid 
function myFuncName() {} 

使其可用於在其所定義的整個範圍被調用。同時分配給變量的函數不允許這樣的事情發生:

myFuncName(); //Invalid 
var myFuncName = function() {}; 

來源和進一步閱讀:

1

腳本標記是一個完整的塊。 funtion1()在加載完整腳本標記後調用。