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 中的replace方法说明
Apr 13 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
Feb 19 Javascript
D3.js中data(), enter() 和 exit()的问题详解
Aug 17 Javascript
果断收藏9个Javascript代码高亮脚本
Jan 06 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
Feb 17 Javascript
JS读写CSS样式的方法汇总
Aug 16 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
Nov 16 Javascript
vue实现学生录入系统之添加删除功能
Jul 11 Javascript
微信小程序实现原生步骤条
Jul 25 Javascript
layui对工具条进行选择性的显示方法
Sep 19 Javascript
vue使用canvas实现移动端手写签名
Sep 22 Javascript
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
phpStudy访问速度慢和启动失败的解决办法
2015/11/19 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
使用PHP开发留言板功能
2019/11/19 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
Node.js中Bootstrap-table的两种分页的实现方法
2017/09/18 Javascript
基于vue框架手写一个notify插件实现通知功能的方法
2019/03/31 Javascript
jQuery实现动态生成年月日级联下拉列表示例
2019/05/11 jQuery
利用不到200行代码写一款属于你自己的js类库
2019/07/08 Javascript
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
[01:54]TI珍贵瞬间系列(三):翻盘
2020/08/28 DOTA
python实现ping的方法
2015/07/06 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
台湾生鲜宅配:大口市集
2017/10/14 全球购物
Trina Turk官网:美国时装和泳装品牌
2018/06/10 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
Structs界面控制层技术
2013/10/11 面试题
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
六查六看心得体会
2014/10/14 职场文书
悬空寺导游词
2015/02/05 职场文书
介绍信怎么写
2015/05/05 职场文书