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 相关文章推荐
Mootools 1.2教程 定时器和哈希简介
Sep 15 Javascript
基于jquery的表头固定的若干方法
Jan 27 Javascript
js报$ is not a function 的问题的解决方法
Jan 20 Javascript
javascript中通过arguments参数伪装方法重载
Oct 08 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 Javascript
jQuery实现的自定义弹出层效果实例详解
Sep 04 Javascript
简单实现js无缝滚动效果
Feb 05 Javascript
从零学习node.js之模块规范(一)
Feb 21 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
Sep 18 Javascript
微信小程序 循环及嵌套循环的使用总结
Sep 26 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
JavaScript实现网页动态生成表格
Nov 25 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
解析VS2010利用VS.PHP插件调试PHP的方法
2013/07/19 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
克隆javascript对象的三个方法小结
2011/01/12 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
详解js创建对象的几种方法及继承
2019/04/12 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
使用Py2Exe for Python3创建自己的exe程序示例
2018/10/31 Python
python根据url地址下载小文件的实例
2018/12/18 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python实现对变位词的判断方法
2020/04/05 Python
在pycharm中debug 实时查看数据操作(交互式)
2020/06/09 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
恶搞卫生巾广告词
2014/03/18 职场文书
三万活动总结
2014/04/28 职场文书
卫生系统先进事迹
2014/05/13 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
会计系毕业求职信
2014/08/07 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
村干部任职承诺书
2015/01/21 职场文书
校长师德表现自我评价
2015/03/04 职场文书
电力培训学习心得体会
2016/01/11 职场文书
Python 匹配文本并在其上一行追加文本
2022/05/11 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python