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 24小时弹出一次的代码(利用cookies)
Sep 03 Javascript
仿微博字符限制效果实现代码
Apr 20 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
Javascript闭包与函数柯里化浅析
Jun 22 Javascript
jQuery动态添加与删除tr行实例代码
Oct 18 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
微信小程序实现tab左右切换效果
Nov 15 Javascript
10种JavaScript最常见的错误(小结)
Jun 21 Javascript
Vue路由前后端设计总结
Aug 06 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 Javascript
js canvas实现五子棋小游戏
Jan 22 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/04/28 PHP
php关联数组快速排序的方法
2015/04/17 PHP
php实现中文转数字
2016/02/18 PHP
php中实现进程锁与多进程的方法
2016/09/18 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
js获取网页高度(详细整理)
2012/12/28 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
JavaScript实现随机替换图片的方法
2015/04/16 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
ztree简介_动力节点Java学院整理
2017/07/19 Javascript
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python修改注册表终止360进程实例
2014/10/13 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
python 垃圾收集机制的实例详解
2017/08/20 Python
详解Python实现多进程异步事件驱动引擎
2017/08/25 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
Python类中self参数用法详解
2020/02/13 Python
Python是怎样处理json模块的
2020/07/16 Python
浅谈Python __init__.py的作用
2020/10/28 Python
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
数控专业个人求职信范例
2013/11/29 职场文书
写给保洁员表扬信
2014/01/08 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
幼儿教师国培感言
2014/02/19 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
工作失职检讨书500字
2014/10/17 职场文书
入党培养人考察意见
2015/06/08 职场文书
铁人观后感
2015/06/16 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL