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 相关文章推荐
用cssText批量修改样式
Aug 29 Javascript
jquery DIV撑大让滚动条滚到最底部代码
Jun 06 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
不得不分享的JavaScript常用方法函数集(下)
Dec 25 Javascript
jquery对象和DOM对象的任意相互转换
Feb 21 Javascript
js+html获取系统当前时间
Nov 10 Javascript
Node.js文件编码格式的转换的方法
Apr 27 Javascript
让Vue也可以使用Redux的方法
May 23 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
JavaScript 作用域scope简单汇总
Oct 23 Javascript
js实现浏览器打印功能的示例代码
Jul 15 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
PHP简介
2006/10/09 PHP
PHP中的extract的作用分析
2008/04/09 PHP
php auth_http类库进行身份效验
2009/03/19 PHP
Smarty中的注释和截断功能介绍
2015/04/09 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
jQuery实现table中两列CheckBox只能选中一个的示例
2017/09/22 jQuery
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
vue 设置 input 为不可以编辑的实现方法
2019/09/19 Javascript
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
理解Python中的With语句
2016/03/18 Python
举例讲解Python中字典的合并值相加与异或对比
2016/06/04 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
python Pygame的具体使用讲解
2017/11/03 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
金融专业应届生求职信
2013/11/02 职场文书
浪费资源的建议书
2014/03/12 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
工人先进事迹材料
2014/12/26 职场文书
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
Python加密与解密模块hashlib与hmac
2022/06/05 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python