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 相关文章推荐
jQuery div层的放大与缩小简单实现代码
Mar 28 Javascript
javascript实现促销倒计时+fixed固定在底部
Sep 18 Javascript
JavaScript基础函数整理汇总
Jan 30 Javascript
JavaScript实现点击自动选择TextArea文本的方法
Jul 02 Javascript
比较常见的javascript中定义函数的区别
Nov 09 Javascript
Node.js 8 中的 util.promisify的详解
Jun 12 Javascript
React组件之间的通信的实例代码
Jun 27 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
Jan 08 jQuery
详解key在Vue列表渲染时究竟起到了什么作用
Apr 20 Javascript
layui下拉列表select实现可输入查找的方法
Sep 28 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 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的session过期设置
2013/06/29 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
PHP面向对象详解(三)
2015/12/07 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
Bootstrap CSS布局之按钮
2016/12/17 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
常见的python正则用法实例讲解
2016/06/21 Python
Python 装饰器使用详解
2017/07/29 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
python实现多进程通信实例分析
2019/09/01 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
英国最大的自有市场,比亚马逊便宜:Flubit
2019/03/19 全球购物
中专生的个人自我评价
2013/12/11 职场文书
经贸日语专业个人求职信范文
2013/12/28 职场文书
校庆接待方案
2014/03/18 职场文书
旅游饭店管理专业自荐书
2014/06/28 职场文书
家长会主持词开场白
2015/05/29 职场文书
寻找成龙观后感
2015/06/12 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle