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 相关文章推荐
List Information About the Binary Files Used by an Application
Jun 18 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
Apr 16 Javascript
jQuery中mouseover事件用法实例
Dec 26 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
JavaScript各类型的关系图解
Oct 16 Javascript
Jquery zTree 树控件异步加载操作
Feb 25 Javascript
jQuery基本选择器之标签名选择器
Sep 03 Javascript
老生常谈js-react组件生命周期
May 02 Javascript
jQuery ajax调用webservice注意事项
Oct 08 jQuery
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
Vue学习笔记之计算属性与侦听器用法
Dec 07 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 一个比较完善的简单文件上传
2010/03/25 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
PHP基于IMAP收取邮件的方法示例
2017/08/07 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
javascript数组组合成字符串的脚本
2021/01/06 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
javascript轮播图算法
2016/10/21 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
Python中的各种装饰器详解
2015/04/11 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
django站点管理详解
2017/12/12 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
2019/08/09 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
如何用JQuery进行表单验证
2013/05/29 面试题
二年级语文教学反思
2014/02/02 职场文书
幼师求职自荐信
2014/05/31 职场文书
学生逃课检讨书
2015/02/17 职场文书
狂人日记读书笔记
2015/06/30 职场文书