javascript를 사용해 보기전에 많이 궁금했던게 있다. 여기저기 script tag 들이 들어가면 그 실행순서는 어떻게 될까.. 였다.
그래서 다음의 테스트를 해 보았다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<script language="JavaScript" type="text/javascript">
<!--
document.write("before head<br/>")
-->
</script>
<HEAD>
<title>js test</title>
<script language="JavaScript" type="text/javascript" src="module1.js"></script>
<script language="JavaScript" type="text/javascript">
<!--
document.write("in head<br/>")
-->
</script>
<script language="JavaScript" type="text/javascript" src="module2.js"></script>
</HEAD>
<BODY>
<script language="JavaScript" type="text/javascript">
<!--
document.write(
"<script language=\"JavaScript\" type=\"text/javascript\" src=\"module4.js\"></script>")
-->
</script>
<script language="JavaScript" type="text/javascript">
<!--
document.write("in body1<br/>")
-->
</script>
<script language="JavaScript" type="text/javascript" src="module3.js"></script>
BODY Contents.<br/>
<script language="JavaScript" type="text/javascript">
<!--
document.write("in body2<br/>")
-->
</script>
</BODY>
</HTML>
module[1,2,3,4].js의 내용은 각각
document.write("module [1,2,3,4]>br/<");
이다.
이때 결과는?
before head
module 1
in head
module 2
module 4
in body1
module 3
BODY Contents.
in body2
이다. 너무도 당연하게 script가 있는 순서대로 수행되었다. 심지어는 document.write()로 적어 놓은 script조차도 그 시점에 실행되었다. 그리고 "BOCY Contents." 를 보면 알겠지만, html 문서상의 text에 대한 evaluation과 병행되어 처리된다.
ECMAScript 스펙 어딘가에 적혀 있긴 하겠지만... 찾아보기 귀찮아서 예제를 돌려 보았다. Safari와 opera, FireFox에서 위와 같은 결과가 나왔으니.. 다 저 순서로 evaluation한다고 보면 되겠지...