javascript的执行原理

JavaScript05

javascript的执行原理,第1张

1、客户端请求某个网页,即我们在上网时在地址栏中输入某个网址,浏览器接收到网址之后,向远程web服务器提出请求2、web服务器响应请求,web服务器找到请求的页面,并将整个页面包含javascript的脚本代码作为相应内容,发送回客户端机器3、客户端浏览器解释并执行带脚本的代码,客户端浏览器打开回应的网页文件内容,从上往下逐行读取并显示其中的html或者脚本代码,脚本是从服务器端下载到客户端,然后在客户端进行的,即不占用服务器端的资源,因此通过客户端脚本,客户端分担了服务器的的任务,大大的减轻了服务器的压力,从而间接地提升了服务器的性能

Javascript是执行顺序是至上而下的,除非特别说明, Javascript代码不会等到页面加载完毕后才执行。

例如:

一个网页里含有以下HTML代码

<div id="ele">welcome to www.jb51.net</div>

如果在这行HTML代码前,加入如下Javascript代码:

<script type="text/javascript">

  document.getElementById('ele').innerHTML= 'welcome to my blog'

</script>

运行该页面,会得到这样的错误信息:“document.getElementById(‘ele') is null。”原因是,当上面的javascript运行时,页面上还没有ID为‘ele'的DOM元素。

解决办法有两种:

1. 把javascript代码放在HTML代码之后:

 <div id="ele">welcome to www.jb51.net</div>

<script type="text/javascript">

  document.getElementById('ele').innerHTML='welcome to my blog'

</script>

2. 等到在网页加载完毕后,运行该javascript代码。可以使用传统的解决办法(load):首先加HTML的body加入“<body load="load()”>,”然后在load()函数里调用上述javascript代码。这里要着重介绍的是用jQuery来实现:

<script>

$(document).ready(function(){

   document.getElementById('ele').innerHTML= 'welcome to my blog'

})

</script>

//当然,既然用到了jQuery,更简单的写法是:

<script>

$(document).ready(function(){

   $('#ele').html('welcome to my blog') //这里也可用.text()方法

})

</script>

可以把上述jQuery代码放在页面的任何位置,它总是等到页面加载完毕后才执行。

下面介绍三种异步执行加载Js 脚本的方法。

1、直接document.write

<script language="javascript">

document.write("<script src='test.js'><\/script>")

</script>

2、动态改变已有script的src 属性

<script src='' id="s1"></script>

<script language="javascript">

s1.src="test.js"

</script>

3、动态创建 script元素

<script>

var oHead = document.getElementsByTagName('HEAD').item(0)

var oScript= document.createElement("script")

oScript.type = "text/javascript"

oScript.src="test.js"

oHead.appendChild( oScript)

</script>

注 ,

这三种方法都是异步的,所以在采用这类方法动态加载Js 的同时,主界面的Js脚本是继续执行的,所以可能出现通过异步加载的Js代码得不到预期的效果的情况。这时候可以考虑采用Ajax加载Js的方法。

大概原理 :用XMLHTTP取得要脚本的内容,再创建 Script 对象。另外注意编码的保持一致。因为服务器与XML使用UTF8编码传送数据。