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入门学习资料收集整理篇
Jul 06 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
jQuery获取当前对象标签名称的方法
Feb 07 Javascript
js中的json对象详细介绍
Oct 29 Javascript
JavaScript中的值类型转换介绍
Dec 31 Javascript
js放到head中失效的原因与解决方法
Mar 07 Javascript
微信小程序 商城开发(ecshop )简单实例
Apr 07 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
详解swipe使用及竖屏页面滚动方法
Jun 28 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
Feb 20 Javascript
ES6的解构赋值实例详解
May 06 Javascript
vue+canvas实现拼图小游戏
Sep 18 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 header函数分析详解
2011/08/06 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
JQuery 引发两次$(document.ready)事件
2010/01/15 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
Vue.js手风琴菜单组件开发实例
2017/05/16 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
layui: layer.open加载窗体时出现遮罩层的解决方法
2019/09/26 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
python基础之入门必看操作
2017/07/26 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
上海期货面试题
2014/01/31 面试题
资源环境与城市管理专业推荐信
2013/11/30 职场文书
村委会主任先进事迹
2014/01/15 职场文书
给校长的一封检讨书
2014/09/20 职场文书
男方婚礼答谢词
2015/01/20 职场文书
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS