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的IE和火狐的兼容性注意事项
Mar 17 Javascript
关闭ie窗口清除Session的解决方法
Jan 10 Javascript
你所未知的3种Node.js代码优化方式
Feb 25 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
jQuery实现将div中滚动条滚动到指定位置的方法
Aug 10 Javascript
详解Javascript几种跨域方式总结
Feb 27 Javascript
jQuery控制元素隐藏和显示
Mar 03 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 Javascript
详解express + mock让前后台并行开发
Jun 06 Javascript
详解redux异步操作实践
Aug 15 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
VBScript版代码高亮
2006/06/26 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
vue.js的提示组件
2017/03/02 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
2017/08/09 jQuery
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
Python中的数学运算操作符使用进阶
2016/06/20 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
非常详细的C#面试题集
2016/07/13 面试题
搞笑创意广告语
2014/03/17 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
2016年清明节寄语
2015/12/04 职场文书
医德医风学习心得体会
2016/01/25 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
Python实现为PDF去除水印的示例代码
2022/04/03 Python