2014-10-11 61 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()在加载完整脚本标记后调用。