javascript的解析执行顺序在各个浏览器中的不同_javascript技巧

简介

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)运行得出的。
二、上述八个实验是相互独立的,请分别单独运行以得到正确的结果。

时间: 2024-09-20 15:30:28

javascript的解析执行顺序在各个浏览器中的不同_javascript技巧的相关文章

javascript的解析执行顺序在各个浏览器中的不同

 javascript是一种解释型语言,它的执行是自上而下的.由于各个浏览器对它的理解有所差异,所以我们有必要深入理解js的执行顺序 简介    javascript是一种解释型语言,它的执行是自上而下的.但是各浏览器对于[自上而下]的理解是有细微差别的,而代码的上下游也就是程序流对于程序正确运行又是至关重要的.所以我们有必要深入理解js的执行顺序.为此,我设计了如下八个实验来获得最确切的结果.    实验   代码如下: <script type="text/javascript&quo

JavaScript编写检测用户所使用的浏览器的代码示例_javascript技巧

能力检测在编写代码之前先检测特定浏览器的能力.例如,脚本在调用某个函数之前,可能要先检测该函数首付存在.这种检测方法将开发人员从考虑具体的浏览器类型和版本中解放出来,让他们把注意力集中到相应的能力是否存在上.能力检测无法精确地检测特定的浏览器和版本. 怪癖检测怪癖实际上是浏览器实现中存在的bug,例如早期的webkit中就存在一个怪癖,即它会再for-in循环中返回被隐藏的属性.怪癖检测通常涉及到运行一段代码,然后确定浏览器是否存在某个怪癖.由于怪癖检测无法精确地检测特定的浏览器和版本. 用户代

浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题_javascript技巧

如果你想使一个元素在全屏模式下展现 (比如说 <video>),你可以调用该元素的 requestFullscreen() 方法:这个方法在 Gecko 中的实现是 element.mozRequestFullScreen(),在 WebKit 中为 element.webkitRequestFullscreen(). 比如一个实例: var elem = document.getElementById("myvideo"); if (elem.requestFullscr

事件模型在各浏览器中存在差异_javascript技巧

标准参考 根据 W3C DOM 2 Events 描述,EventTarget 接口被所有支持 DOM 事件模型的节点(Node)实现. 该接口提供了 'addEventListener' 和 'removeEventListener' 方法,用来绑定或解绑一个 EventListeners 接口到一个 EventTarget. DOM 2 Events 中定义了 Event 接口,用来提供事件的上下文信息,它提供了若干标准属性和方法. 实现 Event 接口的对象一般作为第一个参数传入事件处理

元素的内联事件处理函数的特殊作用域在各浏览器中存在差异_javascript技巧

标准参考 无. 问题描述 在一个元素的属性中绑定事件,实际上就创建了一个内联事件处理函数(如<h1 onclick="alert(this);"...>...</h1>),内联事件处理函数有其特殊的作用域链,并且各浏览器的实现细节也有差异. 造成的影响 如果在元素的内联事件处理函数中使用的变量或调用的方法不当,将导致脚本运行出错. 受影响的浏览器 所有浏览器 问题分析 1. 内联事件处理函数的作用域链 与其他函数不同,内联事件处理函数的作用域链从头部开始依次是:

javascript中Date()函数在各浏览器中的显示效果_javascript技巧

1.JavaScript没有基本的日期数据类型,所以只能显式的创建Date对象.例如:var myDate=new Date(); 2.为了创建一个存储了特定日期的,或者时间的Date对象,可以简单的把日期或者日期与时间放到括号里面: var myDate=new Date("2015/06/16 10:30"); alert(myDate); 火狐浏览器显示的效果为: IE浏览器显示效果: 谷歌浏览器显示效果为: 注意:如果上面的代码这样写;在火狐和IE浏览器里面报错: var my

javascript生成/解析dom的CDATA类型的字段的代码_javascript技巧

两段demo代码如下(for ie only): <script type="text/javascript">   //demo1 var  xmlDoc  =  new  ActiveXObject("Msxml2.DOMDocument");   var  root;   var  CDATASection;   xmlDoc.async  =  false;   xmlDoc.loadXML("<a/>");  

javascript判断是否按回车键并解决浏览器之间的差异_javascript技巧

复制代码 代码如下: <li class="item pin"> <span class="overlabel" style="display: block;">请输入验证码</span> <input type="text" class="txt" id="checkNum" name="checkNum" maxlengt

整理的比较全的event对像在ie与firefox浏览器中的区别_javascript技巧

window.event IE:有window.event对象 FF:没有window.event对象.可以通过给函数的参数传递event对象.如onmousemove=doMouseMove(event) 鼠标当前坐标 IE:event.x和event.y. FF:event.pageX和event.pageY. 通用:两者都有event.clientX和event.clientY属性. 鼠标当前坐标(加上滚动条滚过的距离) IE:event.offsetX和event.offsetY. FF