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 相关文章推荐
IE中的File域无法清空使用jQuery重设File域
Apr 24 Javascript
js加入收藏夹代码(兼容ie/ff/op)
May 16 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
Aug 03 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
详解Angular Reactive Form 表单验证
Jul 06 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 Javascript
小程序如何写动态标签的实现方法
Feb 05 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
Feb 11 Javascript
深入了解Vue3模板编译原理
Nov 19 Vue.js
详细聊聊浏览器是如何看闭包的
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
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
PHP跳转页面的几种实现方法详解
2013/06/08 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
用jQuery toggleClass 实现鼠标移上变色
2014/05/14 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
Python中垃圾回收和del语句详解
2018/11/15 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
家得宝墨西哥官网:The Home Depot墨西哥
2019/11/18 全球购物
工程力学专业毕业生求职信
2013/10/06 职场文书
药学专业个人自我评价
2013/11/11 职场文书
全陪导游欢迎词
2014/01/17 职场文书
元旦晚会邀请函
2014/02/01 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers