js加载、执行顺序
js加载与执行顺序:
ie:head内外都是异步加载,同步执行
非ie:head里异步加载,head外同步加载,head内外都同步执行
async:规定异步执行脚本(仅适用于外部脚本)(html5)
defer:规定是否对脚本执行进行延迟,直到页面加载为止。(ie特性)
<html>
<head>
<script type="text/javascript">var str='1';</script>
<script type="text/javascript">console.log('a'+str);</script>
<script type="text/javascript" src="http://misc.secoo.com/js/jquery-1.8.3.min.js"></script>
<!-- <script type="text/javascript" src="http://coolshell.cn/asyncjs/alert.js"></script> -->
<script type="text/javascript" src="http://my.secoo.com/order/test.jsp"></script>
<script type="text/javascript">console.log('a'+str);</script>
<script type="text/javascript">str = '3';</script>
<script type="text/javascript">console.log('a'+str);</script>
<script type="text/javascript" src="http://pifa.secoo.com/js/secoo.tools.min.js"></script>
</head>
<body>
12
<script async="async" type="text/javascript">var str2='1';</script>
<script async="async" type="text/javascript">console.log('b'+str2);</script>
<script async="async" type="text/javascript" src="http://misc.secoo.com/js/jquery-1.8.3.min.js?#"></script>
<!-- <script type="text/javascript" src="http://coolshell.cn/asyncjs/alert.js"></script> -->
<script async="async" type="text/javascript" src="http://my.secoo.com/order/test.jsp?#"></script>
<script async="async" type="text/javascript">console.log('b'+str2);</script>
<script async="async" type="text/javascript">str2 = '3';</script>
<script async="async" type="text/javascript">console.log('b'+str2);</script>
<script async="async" type="text/javascript" src="http://pifa.secoo.com/js/secoo.tools.min.js?#"></script>
</body>
</html>
<%@page language="java" contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%> <% Thread.currentThread().sleep(1000*10); response.getWriter().write("var test=1; str=2"); %>
==========================================================
加载:当<script>节点在<head>外,则为同步加载(后面的节点加载被阻断),当在<head>内部,则为异步加载(加载不被阻断)
执行:同步执行,当一个加载未完成时,其后面的脚本执行将被阻断(即当前脚本的执行会在其前面的脚本加载完成后进行)
1.test.jsp
<script type="text/javascript" src="<%=basePath %>order/test_logic.jsp"></script>
<script type="text/javascript" src="<%=basePath %>js/myReservation.js"></script>
<script type="text/javascript">alert('111111111111111');alert(test);</script>
2.test_logic.jsp
<%
Thread.currentThread().sleep(10*1000); response.getWriter().write("var test = 1;");
%>
3、代码块
JavaScript中的代码块是指由<script>标签分割的代码段。例如:
<script type="text/javascript">alert("代码块");</script>
JS是按照代码块来进行编译和执行的,代码块间相互独立,但变量和方法共享。例如:
<script type="text/javascript">
alert(str);//因为没有定义str,所以浏览器会出错,下面的不能运行
alert("我是代码块一");//没有运行到这里
var test = "我是代码块一变量";
</script>
<script type="text/javascript">
alert("我是代码块二"); //这里有运行到
alert(test); //弹出"我是代码块一变量"
</script>
上面的代码中代码块一中运行报错,但不影响代码块二的执行,这就是代码块间的独立性,而代码块二中能调用到代码一中的变量,则是块间共享性。
4、声明式函数与赋值式函数
JS中的函数定义分为两种:声明式函数与赋值式函数。
<script type="text/javascript">
function Fn(){//声明式函数}
var Fn = function{//赋值式函数}
</script>
声明式函数与赋值式函数的区别在于:在JS的预编译期,声明式函数将会先被提取出来,然后才按顺序执行js代码。

浙公网安备 33010602011771号