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 全角转半角部分
Oct 28 Javascript
JavaScript CSS修改学习第六章 拖拽
Feb 19 Javascript
jquery radio 操作代码
Mar 16 Javascript
浅谈js中的闭包
Mar 16 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
Nov 05 Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 Javascript
jquery实现简易验证插件封装
Sep 13 jQuery
浅谈Ant Design Pro 菜单自定义 icon
Nov 17 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实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
php建立Ftp连接的方法
2015/03/07 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
JavaScript使用HTML5的window.postMessage实现跨域通信例子
2014/04/11 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
jQuery实现简洁的导航菜单效果
2015/11/23 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
Node.js+Express配置入门教程详解
2016/05/19 Javascript
AngularJS实现路由实例
2017/02/12 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Vue入门之数量加减运算操作示例
2018/12/11 Javascript
vue中keep-alive组件的入门使用教程
2019/06/06 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
[44:51]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第二场
2018/04/05 DOTA
Python3.6正式版新特性预览
2016/12/15 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
Python数据类型之Number数字操作实例详解
2019/05/08 Python
wxPython多个窗口的基本结构
2019/11/19 Python
在python中做正态性检验示例
2019/12/09 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
轻松掌握CSS3中的字体大小单位rem的使用方法
2016/05/24 HTML / CSS
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
学校岗位设置方案
2014/01/16 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
企业演讲比赛主持词
2014/03/18 职场文书
信用卡工资证明范本
2014/10/17 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
Win11查看设备管理器
2022/04/19 数码科技