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 相关文章推荐
JS控制表格隔行变色
Jun 26 Javascript
Javascript load Page,load css,load js实现代码
Mar 31 Javascript
疯狂Jquery第一天(Jquery学习笔记)
May 11 Javascript
处理及遍历XML文档DOM元素属性及方法整理
Aug 23 Javascript
jQuery实现带有洗牌效果的动画分页实例
Aug 31 Javascript
Vee-Validate的使用方法详解
Sep 22 Javascript
详解VUE 数组更新
Dec 16 Javascript
JavaScript实现区块链
Mar 14 Javascript
vue组件jsx语法的具体使用
May 21 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
Angularjs实现数组随机排序的方法
Oct 02 Javascript
es6 filter() 数组过滤方法总结
Apr 03 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
2013/04/26 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
Redis构建分布式锁
2017/03/28 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
javascript 字符 Escape,encodeURI,encodeURIComponent
2009/07/09 Javascript
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
浅谈JS和jQuery的区别
2019/03/27 jQuery
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
Python下载指定页面上图片的方法
2016/05/12 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
python中for循环变量作用域及用法详解
2019/11/05 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
CSS中越界问题的经典解决方案【推荐】
2016/04/19 HTML / CSS
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
应用艺术毕业生的自我评价
2013/12/04 职场文书
高一自我鉴定
2013/12/17 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
优秀大学生申请书
2019/06/24 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS