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 Function函数类型介绍
Apr 08 Javascript
AngularJS中的过滤器使用详解
Jun 16 Javascript
JSONP原理及简单实现
Jun 08 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
浅谈Node.js:Buffer模块
Dec 05 Javascript
bootstrap输入框组使用方法
Feb 07 Javascript
纯JS实现弹性导航条效果
Mar 06 Javascript
bootstrap table服务端实现分页效果
Aug 10 Javascript
vue watch监听对象及对应值的变化详解
Feb 24 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
JavaScript中AOP的实现与应用
May 06 Javascript
vue+axios全局添加请求头和参数操作
Jul 24 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入门源程序
2006/10/09 PHP
解析如何在PHP下载文件名中解决乱码的问题
2013/06/20 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
Javascript编程之继承实例汇总
2015/11/28 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
js中的深浅拷贝问题简析
2019/05/10 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
2019/05/10 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
python检测远程服务器tcp端口的方法
2015/03/14 Python
介绍Python的Django框架中的QuerySets
2015/04/20 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
基于python3抓取pinpoint应用信息入库
2020/01/08 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
Python map及filter函数使用方法解析
2020/08/06 Python
python利用tkinter实现图片格式转换的示例
2020/09/28 Python
html5 外链式实现加减乘除的代码
2019/09/04 HTML / CSS
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
党员查摆四风问题思想汇报
2014/10/25 职场文书
会议欢迎词
2015/01/23 职场文书
英文自荐信范文
2015/03/25 职场文书
社区党支部公开承诺书
2015/04/29 职场文书