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 相关文章推荐
javascript编程起步(第六课)
Jan 10 Javascript
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
Mar 24 Javascript
JQuery的常用选择器、过滤器、方法全面介绍
May 25 Javascript
Vue.js数据绑定之data属性
Jul 07 Javascript
基于zepto.js实现手机相册功能
Jul 11 Javascript
vue、react等单页面项目应该这样子部署到服务器
Jan 03 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
layui中的switch开关实现方法
Sep 03 Javascript
vue实现的封装全局filter并统一管理操作示例
Feb 02 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
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
php模拟服务器实现autoindex效果的方法
2015/03/10 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
理解Koa2中的async&amp;await的用法
2018/02/05 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
vue cli升级webapck4总结
2018/04/04 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
[00:12]DAC SOLO赛卫冕冠军 VG.Paparazi灬展现SOLO技巧
2018/04/06 DOTA
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
mac系统安装Python3初体验
2018/01/02 Python
pandas DataFrame实现几列数据合并成为新的一列方法
2018/06/08 Python
python实现抽奖小程序
2020/04/15 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
Python如何使用bokeh包和geojson数据绘制地图
2020/03/21 Python
python lambda的使用详解
2021/02/26 Python
英国著名音像制品和图书游戏购物网站:Zavvi
2016/08/04 全球购物
《神奇的克隆》教学反思
2014/04/10 职场文书
营销与策划专业求职信
2014/06/20 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
小学优秀班主任材料
2014/12/17 职场文书
酒会邀请函
2015/01/31 职场文书
期末个人总结范文
2015/02/13 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python