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 相关文章推荐
屏蔽网页右键复制和ctrl+c复制的js代码
Jan 04 Javascript
PHP abstract与interface之间的区别
Nov 11 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
Apr 15 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
Oct 20 Javascript
javascript中SetInterval与setTimeout的定时器用法
Aug 24 Javascript
javascript简单判断输入内容是否合法的方法
May 11 Javascript
微信小程序实现YDUI的ScrollNav组件
Feb 02 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
May 09 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
自定义Vue中的v-module双向绑定的实现
Apr 17 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 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
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
jquery随意添加移除html的实现代码
2011/06/21 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
jquery.uploadView 实现图片预览上传功能
2017/08/10 jQuery
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
js实现前面自动补全位数的方法
2018/10/10 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
微信小程序webview 脚手架使用详解
2019/07/22 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
python中urlparse模块介绍与使用示例
2017/11/19 Python
python并发编程之线程实例解析
2017/12/27 Python
Python入门学习指南分享
2018/04/11 Python
对Python中plt的画图函数详解
2018/11/07 Python
Python pickle模块实现对象序列化
2019/11/22 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
计算机专业推荐信范文
2013/11/20 职场文书
创业计划书中包含的9个方面
2013/12/26 职场文书
结婚保证书范文
2014/04/29 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
教代会闭幕词
2015/01/28 职场文书
初一军训感言
2015/08/01 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android