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事件列表解说
Dec 22 Javascript
jQuery checkbox全选/取消全选实现代码
Nov 14 Javascript
jquery获得下拉框值的代码
Aug 13 Javascript
jquery  实现轮播图详解及实例代码
Oct 12 Javascript
Angular ng-repeat指令实例以及扩展部分
Dec 26 Javascript
JavaScript校验Number(4,1)格式的数字实例代码
Mar 13 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
vue引入js数字小键盘的实现代码
May 14 Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 Javascript
vue 中url 链接左边的小图标更改问题
Dec 30 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 Javascript
js回到页面指定位置的三种方式
Dec 17 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
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP.ini安全配置检测工具pcc简单介绍
2015/07/02 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
jquery利用ajax调用后台方法实例
2013/08/23 Javascript
自己编写的类似JS的trim方法
2013/10/09 Javascript
sails框架的学习指南
2014/12/22 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
JavaScript弹窗基础篇
2016/04/27 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
js实现加载更多功能实例
2016/10/27 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
详解node Async/Await 更好的异步编程解决方案
2018/05/10 Javascript
微信小程序日历效果
2018/12/29 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
使用python开发vim插件及心得分享
2014/11/04 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python处理CSV与List的转换方法
2018/04/19 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
在Python 中实现图片加框和加字的方法
2019/01/26 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
2020/11/13 Python
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
伦敦一卡通:The London Pass
2018/11/30 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
西式结婚主持词
2014/03/14 职场文书
个人年终总结怎么写
2015/03/09 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
电力培训学习心得体会
2016/01/11 职场文书
Canvas如何做个雪花屏版404的实现
2021/09/25 HTML / CSS
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL