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 相关文章推荐
js判断背景图片是否加载成功使用img的width实现
May 29 Javascript
Egret引擎开发指南之编译项目
Sep 03 Javascript
jQuery DOM删除节点操作指南
Mar 03 Javascript
JavaScript实现将xml转换成html table表格的方法
Apr 17 Javascript
JavaScript淡入淡出渐变简单实例
Aug 06 Javascript
js仿苹果iwatch外观的计时器代码分享
Aug 26 Javascript
关于原生js中bind函数的简单实现
Aug 10 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
如何使node也支持从url加载一个module详解
Jun 05 Javascript
vue开发环境配置跨域的方法步骤
Jan 16 Javascript
使用axios请求接口,几种content-type的区别详解
Oct 29 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 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
文件上传的实现
2006/10/09 PHP
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
javascript+php实现根据用户时区显示当地时间的方法
2015/03/11 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
ExtJS判断IE浏览器类型的方法
2014/02/10 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
如何实现vue的tree组件
2020/12/03 Vue.js
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
小学学校评估方案
2014/06/08 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
校园文化艺术节宣传标语
2014/10/09 职场文书
一年级小学生评语大全
2014/12/25 职场文书
中学生清明节演讲稿
2015/03/18 职场文书
python爬虫--selenium模块
2021/03/31 Python
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
python分分钟绘制精美地图海报
2022/02/15 Python
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis