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 相关文章推荐
document.documentElement &amp;&amp; document.documentElement.scrollTop
Dec 01 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
Jan 08 Javascript
xss文件页面内容读取(解决)
Nov 28 Javascript
JavaScript中的onerror事件概述及使用
Apr 01 Javascript
js特效,页面下雪的小例子
Jun 17 Javascript
AngularJS基础 ng-show 指令简单示例
Aug 03 Javascript
vue插件tab选项卡使用小结
Oct 27 Javascript
实例解析Array和String方法
Dec 14 Javascript
bootstrap IE8 兼容性处理
Mar 22 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
Jun 11 Javascript
JavaScript实现省市区三级联动
Feb 13 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
PHP4中实现动态代理
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
2014/04/24 PHP
CodeIgniter常用知识点小结
2016/05/26 PHP
PHP设置images目录不充许http访问的方法
2016/11/01 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
动态读取JSON解析键值对的方法
2014/06/03 Javascript
js简单实现图片延迟加载的方法
2016/07/19 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
vue中的过滤器及其时间格式化问题
2020/04/09 Javascript
jQuery实现的分页插件完整示例
2020/05/26 jQuery
[00:37]食人魔魔法师轮盘吉兆顺应全新至宝将拥有额外款式
2019/12/19 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
为python设置socket代理的方法
2015/01/14 Python
Sanic框架流式传输操作示例
2018/07/18 Python
django框架基于模板 生成 excel(xls) 文件操作示例
2019/06/19 Python
深入了解Django中间件及其方法
2019/07/26 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
C++面试题目
2013/06/25 面试题
学前班教师的自我鉴定
2013/12/05 职场文书
企业文明单位申报材料
2014/05/16 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
开平碉楼导游词
2015/02/06 职场文书
实习推荐信格式模板
2015/03/27 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
怎样写工作总结啊!
2019/06/18 职场文书
实习员工转正的评语汇总,以备不时之需
2019/12/17 职场文书