javascript(js)放在head和body的区别

转载自: http://www.itbkc.com/?post=93

1:将JavaScript标识放置<Head>...</Head>在头部之间,使之在主页和其余部分代码之前预先装载;比如对*.js文件的提前调用。也就是说把代码放在<head>区在页面载入的时候,就同时载入了代码,你在<body>区调用时就不需要再载入代码了,速度就提高了,这种区别在小程序上是看不出的,当运行很大很复杂的程序时,就可以看出了。

2:当然也可以将JavaScript标识放置在<Body>...</Body>主体之间以实现某些部分动态地创建文档。这里比如制作鼠标跟随事件,肯定只有当页面加载后再进行对鼠标坐标的计算。或者是filter滤镜与javascript的联合使用产生的图片淡入淡出效果。

这就告诉我们,如果我们想定义一个全局对象,而这个对象是页面中的某个按钮(诸如此类)时,我们必须将其放入body中,道理很明显:如果放入head,那当你定义的时候,那个按钮都没有被加载,你能得到的只可能是一个undefind。要是function就没有区别:要是<script>alert(1)</script>会跟放的位置有关:一个是head加载完就alert;一个是要跟在body中加载循序alert;

其实,在head中的脚本就是在页面其他元素前集中载入了,然后页面中什么位置都可以调用。如果是在body中:一是要注意顺序即调用要在定义之后;二js的加载还会影响其他的元素加载,会出现页面显示不完整的现象。其本质是一样的,只不过整合了资源到达体验最优化,其实我们看到的网页一下就渲染完成显示在我们眼前,但是在后台它可能还在加载一些其他元素如脚本,这样只不过把我们想要看的先显示出来了,其实这个并不是我们想象中的速度那么快,还有其他的元素正在加载,只不过我们察觉不到而已。

所以,需要预载和重复使用的函数可以写在head里,一次性使用,动态创建元素和简单目的的,可以写在body中。其实解释顺序是:服务器脚本语言—客户端脚本语言—html解析。在body中的脚本是按顺序执行的。这里说下有的人说JQ代码好像不是这样的,其实是一样的,$(document).ready(function(){});这个代码大家都很熟悉,这是为了防止文档在完全加载(就绪)之前运行 jQuery代码。再说一句它的解释是:“允许你绑定一个在DOM文档载入完成后,执行的函数。”DOM文档加载和页面加载,却是不同,也就直接说明了两者是有很大区别。页面加载起码包含DOM文档加载(也就是你书写的代码机构等)和页面内容加载两个方面。这样来说,两者的区别和实质也就很明显了。

最后,页面中脚本代码最好要用 <!----> 把代码括起来。如果浏览器不支持此脚本,那么浏览器会跳过它,不去执行,也不会提出错误信息。


JavaScript代码默认是同步执行的,不管是内嵌的还是外部的JavaScript代码,都会阻塞后续html代码的加载和渲染以及后续JavaScript的解析。这是个必要的特性,试想一下,如果你要使用某个功能,例如Jquery库的功能,把Jquery库放在你使用的代码之前(一般放在head里),这样你在其后的任何位置都可以无限制的使用Jquery的功能而不用担心其Jquery函数功能是否已经被解析载入。

但如果你这有一个JavaScript文件比较大,而这一部分的功能比较独立,没有它也不会影响页面的显示效果,那就可以考虑把它放在body的最后,即</body>之前,这样整个页面载入了,页面完全显示了才开始处理这部分JavaScript,当然,也可以loadJs等异步加载方式进行异步加载,这样就不会阻塞其他HTML和JavasScript了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值