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类中的公有变量和私有变量
Jul 24 Javascript
js loading加载效果实现代码
Nov 24 Javascript
DIV菜单层实现代码
Nov 19 Javascript
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
Apr 27 Javascript
js实现for循环跳过undefined值示例
Jul 02 Javascript
layer.open 获取不到表单信息的解决方法
Sep 26 Javascript
简单了解常用的JavaScript 库
Jul 16 Javascript
react实现复选框全选和反选组件效果
Aug 25 Javascript
Nuxt 嵌套路由nuxt-child组件用法(父子页面组件的传值)
Nov 05 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+Html+缓存
2006/12/20 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php UBB 解析实现代码
2011/11/27 PHP
php获取QQ头像并显示的方法
2014/12/23 PHP
PHP pear安装配置教程
2016/05/14 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
JS之小练习代码
2008/10/12 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JS中prototype的用法实例分析
2015/03/19 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
ES6中定义类和对象的方法示例
2019/07/31 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
JavaScript实现轮播图片完整代码
2020/03/07 Javascript
Python 查看文件的读写权限方法
2018/01/23 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
亿企通软件测试面试题
2012/04/10 面试题
介绍一下UNIX启动过程
2013/11/14 面试题
服务标兵事迹材料
2014/05/04 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
超市促销活动总结
2014/07/01 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
见义勇为事迹材料
2014/12/24 职场文书
《比的意义》教学反思
2016/02/18 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Java内存模型之happens-before概念详解
2021/06/13 Java/Android