JavaScript 全面解析各种浏览器网页中的JS 执行顺序


Posted in Javascript onFebruary 17, 2009

我们知道javaScript是一种解释型语言,他的执行是自上而下,但是各个浏览器对于至上而下的理解是有细微差别的,而代码的上下游也就是程序流又对于程序正确至关重要,所以我觉得有必要深入理解多个js块儿的执行顺序。
首先得知道有多少方法能把javaScript加入到页面中呢?常见下述的前2种,其实还有更多。
1.页面中直接引入外部js文件:<script src="my.js"></script>
2.页面中直接写如js片段<script>alert(1)</script>
3.在js中引入js文件document.write("<scr"+"ipt src='my.js'></scr"+"ipt>");
注意:这时候"..</script>"必须拆成"</scr"+"ipt>",否则浏览器可能会把父js片段关闭掉,出错;
4.同样在js中引用其他js片段,document.write("<scr"+"ipt>alert(1)</scr"+"ipt>");
你可能觉得这个并没有必要,既然已经在script中了还套一层干嘛?呵呵,怎么说也是一种写法,而且它具有其特殊的行为,稍后我们讨论到。
5.使用Ajax中的xmlHttpRequest结合eval()来引入js,我最早在Dojo的代码见到,写的详细些:
var ajaxRequest = getXmlHttpRequest()//省去各个浏览器得到xmlHttpRequest的部门
ajaxRequest.open("GET","my.js",false);//使用xmlHttpRequest对象Get方法的同步调用
ajaxRequest.send(null);
sJsFragment = ajax.responseText;//得到字符串为js片段
eval(sJsFragment);//执行js片段
注意:这里要求my.js即后来的sJsFragment内容得是非常规范的js,切没有//开头的注释,怎样检查js是否规范呢?去http://jslint.com/
6.无所不能的Dom方法,这个我最早在Yahoo的前端代码中见到,非常厉害,也写的详细些:
var oScript = document.createElement("script");//创建一个Script元素
oScript.src = "my.js";//制定src属性
document.getElementsByTagName("head")[0].appendChild(oScript);
说明:my.js的内容会在oScript加入到文档中之后获得并执行。仔细看下这段容易发现这个调用是异步的,可以在文档载入之后通过事件触发,我用它变通了一下,作为了xmlHttpRequest的Get方法在跨域取数时的替代,获得了很完美的效果,以后有机会专门写篇文。
六种不少吧,可能还会有吧,而且这几种之间还可能相互嵌套,变化无常。
其中1、2、4、6种方式引入的javaScript的执行顺序是非常自然的,随着页面的载入以及后续的事件触发,它们遵守先来后到、而其内部自上而下。
我们主要关注的是第3、4种引入js方法带来的问题(转帖请注明出处:http://blog.csdn.net/lenel)

Javascript 相关文章推荐
11款新鲜的jQuery插件[附所有demo下载]
Jan 24 Javascript
window.navigate 与 window.location.href 的使用区别介绍
Sep 21 Javascript
javascript dom追加内容实现示例
Sep 21 Javascript
js获取当前页面路径示例讲解
Jan 08 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
Apr 12 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
在点击div中的p时,如何阻止事件冒泡
Feb 07 Javascript
原生js FileReader对象实现图片上传本地预览效果
Mar 27 Javascript
jQuery中extend函数简单用法示例
Oct 11 jQuery
vue-music关于Player播放器组件详解
Nov 28 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 Javascript
JSON扫盲帖 JSON.as类教程
Feb 16 #Javascript
动态为事件添加js代码示例
Feb 15 #Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 #Javascript
javascript Ext JS 状态默认存储时间
Feb 15 #Javascript
Javascript 获取链接(url)参数的方法
Feb 15 #Javascript
JavaScript 获得选中文本内容的方法
Feb 15 #Javascript
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 #Javascript
You might like
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
php自动加载代码实例详解
2021/02/26 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
js转化毫秒为时间格式代码
2014/04/10 Javascript
JS使用getComputedStyle()方法获取CSS属性值
2014/04/23 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
2015/03/04 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
vue webpack build资源相对路径的问题及解决方法
2020/06/04 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Flask框架学习笔记(一)安装篇(windows安装与centos安装)
2014/06/25 Python
Python实现网站文件的全备份和差异备份
2014/11/30 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
HTML5语音识别标签写法附图
2013/11/18 HTML / CSS
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
售房协议书
2014/08/19 职场文书
助残日活动总结
2014/08/27 职场文书
生物工程专业求职信
2014/09/03 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
世界水日宣传活动总结
2015/02/09 职场文书