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 eval和JSON之间的联系
Dec 31 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
Jun 28 Javascript
JS获取浏览器语言动态加载JS文件示例代码
Oct 31 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
Apr 17 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
Aug 10 Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
Bootstrap输入框组件简单实现代码
Mar 06 Javascript
详解webpack + vue + node 打造单页面(入门篇)
Sep 23 Javascript
详解JavaScript 的变量
Mar 08 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
Sep 10 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
全国FM电台频率大全 - 30 宁夏回族自治区
2020/03/11 无线电
javascript form 验证函数 弹出对话框形式
2009/06/23 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
JavaScript通过字典进行字符串翻译转换的方法
2015/03/19 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
JavaScript中的ajax功能的概念和示例详解
2016/10/17 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
详解开发react应用最好用的脚手架 create-react-app
2018/04/24 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
Python continue语句用法实例
2014/03/11 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python实现kMeans算法
2017/12/21 Python
简单了解python变量的作用域
2019/07/30 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
详解rem 适配布局
2018/10/31 HTML / CSS
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
测量实习生自我鉴定
2013/09/19 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
教师职位说明书
2014/07/29 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
小学生读书笔记范文
2015/06/30 职场文书
python实现三次密码验证的示例
2021/04/29 Python
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers