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 相关文章推荐
JS 自定义函数缺省值的设置方法
May 05 Javascript
php图像生成函数之间的区别分析
Dec 06 Javascript
B/S模式项目中常用的javascript汇总
Dec 17 Javascript
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
Feb 17 Javascript
简单实现jquery隔行变色
Nov 09 jQuery
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
Dec 28 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
Jun 19 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
微信小程序tabbar底部导航
Nov 05 Javascript
浅谈react useEffect闭包的坑
Jun 08 Javascript
angular4实现带搜索的下拉框
Mar 25 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新手上路(七)
2006/10/09 PHP
PHP获取数组最大值下标的方法
2015/05/12 PHP
四个PHP非常实用的功能
2015/09/29 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
Laravel数据库读写分离配置的方法
2019/10/13 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
javascript模拟map输出与去除重复项的方法
2015/02/09 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
jquery实现穿梭框功能
2021/01/19 jQuery
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
python编写猜数字小游戏
2019/10/06 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
如果重写了对象的equals()方法,需要考虑什么
2014/11/02 面试题
信息技术专业大学生个人的自我评价
2013/10/05 职场文书
计算机专业个人简短的自我评价
2013/10/23 职场文书
工作鉴定评语
2014/05/04 职场文书
红色故事汇观后感
2015/06/18 职场文书
升学宴学生致辞
2015/07/27 职场文书
员工规章制度范本
2015/08/07 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL