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 相关文章推荐
javascritp实现input输入框相关限制用法
Jun 29 Javascript
javascript打开新窗口同时关闭旧窗口
Jan 16 Javascript
jquery div 居中技巧应用介绍
Nov 24 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
Javascript点击按钮随机改变数字与其颜色
Sep 01 Javascript
JavaScript结合HTML DOM实现联动菜单
Apr 05 Javascript
react.js CMS 删除功能的实现方法
Apr 17 Javascript
vue2.0获取鼠标位置的方法
Sep 13 Javascript
vue.config.js常用配置详解
Nov 14 Javascript
javascript实现文字跑马灯效果
Jun 18 Javascript
详解Vue中的watch和computed
Nov 09 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
PHP5中MVC结构学习
2006/10/09 PHP
PHP 第二节 数据类型之转换
2012/04/28 PHP
PHP的加密方式及原理
2012/06/14 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
JavaScript仿微博发布信息案例
2016/11/16 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
2016/11/25 Javascript
jQuery实现广告条滚动效果
2017/08/22 jQuery
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
2020/04/11 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python3数字求和的实例
2019/02/19 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
internal修饰符起什么作用
2013/12/16 面试题
建筑班组长岗位职责
2014/01/02 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
内乡县衙导游词
2015/02/05 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android