javascript的解析执行顺序在各个浏览器中的不同


Posted in Javascript onMarch 17, 2014

简介

javascript是一种解释型语言,它的执行是自上而下的。但是各浏览器对于【自上而下】的理解是有细微差别的,而代码的上下游也就是程序流对于程序正确运行又是至关重要的。所以我们有必要深入理解js的执行顺序。为此,我设计了如下八个实验来获得最确切的结果。

实验

<script type="text/javascript"> 
//实验一: 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
t(1); 
//结果: 
//[t(a, b)]a:1, b:undefined //实验二: 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
t(1); 
//结果: 
//[t(a)]a:1 
//实验三: 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
t(1, 2); 
//结果: 
//[t(a, b)]a:1, b:2 
//实验四: 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
t(1, 2); 
//结果: 
//[t(a)]a:1 
//实验五 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
t(1); 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
//结果: 
//[t(a, b)]a:1, b:undefined 
//实验六 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
t(1, 2); 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
//结果: 
//[t(a, b)]a:1, b:2 
//实验七 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
t(1); 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
//结果: 
//[t(a)]a:1 
//实验八 
function t(a, b) 
{ 
alert("[t(a, b)]a:" + a + ", b:" + b); 
} 
t(1, 2); 
function t(a) 
{ 
alert("[t(a)]a:" + a); 
} 
//结果: 
//[t(a)]a:1 
</script>

后记

定义javascript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是不行的。
调用函数时,js通过函数名找到对应的函数对象,然后根据函数定义时的参数,和表达式参数列表按顺序匹配,多余的参数舍去,不够的参数按undefined处理,然后执行函数代码。

所以定义函数时,通常把必选参数放在参数列表最前面,可选参数放在必选参数后面。

注意事项

一、上述八个实验的结果是经过360浏览器(版本/内核:6.3.1.142/21.0.1180.89)和火狐浏览器(版本:27.0.1)运行得出的。
二、上述八个实验是相互独立的,请分别单独运行以得到正确的结果。

Javascript 相关文章推荐
javascript 写类方式之六
Jul 05 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
jquery实现点击展开列表同时隐藏其他列表
Aug 10 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
深入理解JavaScript中的浮点数
May 18 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
BootStrap入门教程(一)之可视化布局
Sep 19 Javascript
javascript 秒表计时器实现代码
Mar 09 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
jquery禁用右键单击功能屏蔽F5刷新
Mar 17 #Javascript
jquery自动将form表单封装成json的具体实现
Mar 17 #Javascript
获取当前点击按钮的id用this.id实现
Mar 17 #Javascript
jquery如何根据值设置默认的选中项
Mar 17 #Javascript
jquery插件开发之实现md5插件
Mar 17 #Javascript
js对图片base64编码字符串进行解码并输出图像示例
Mar 17 #Javascript
javascript文件中引用依赖的js文件的方法
Mar 17 #Javascript
You might like
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
js 利用image对象实现图片的预加载提高访问速度
2013/03/29 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
使用js实现关闭js弹出层的窗口
2014/02/10 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
jQuery基于ajax实现页面加载后检查用户登录状态的方法
2017/02/10 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
Python的一些用法分享
2012/10/07 Python
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
Python语言进阶知识点总结
2019/05/28 Python
详解python中index()、find()方法
2019/08/29 Python
Python 装饰器原理、定义与用法详解
2019/12/07 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
django使用channels实现通信的示例
2020/10/19 Python
手把手教你配置JupyterLab 环境的实现
2021/02/02 Python
全球性的在线商店:Vogca
2019/05/10 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
考生诚信考试承诺书
2014/05/23 职场文书
医学专业自荐信
2014/06/14 职场文书
2015年外联部工作总结
2015/04/03 职场文书
横空出世观后感
2015/06/09 职场文书
电视新闻稿
2015/07/17 职场文书