javascript两种function的定义介绍及区别说明


Posted in Javascript onMay 02, 2013

一般情况下两者的调用结果是一样的,但是还是有区别的。
第一种方式:

function a(){ 
alert('old'); 
} 
var b=a; 
function a(){ 
b(); 
alert('new'); 
} 
a();//浏览器就会出现内存溢出的情况

第二种方式:
function a(){ 
alert('old'); 
} 
var b=a; 
var a=function(){ 
b(); 
alert('new'); 
} 
a();//浏览器就会按顺序alert出‘old'和‘new'

这里就可以很明显区分两个方式的区别了。定义的顺序不同。
第一种,刚开始其实没有重新定义 a 这个function 而在里面执行了其本身。
第二种方式, a = function () 这里没有执行到 function 里面的代码 a 已经被重新定义了。所以这里的重定义是有效的
补充1:
function a(){ 
alert('old'); 
} 
var b=a; 
function a(){ 
b(); 
alert('new'); 
}

编译时: 首先a被定义为alert("old"), 接着又被定义成b();alert("new");
运行时: b = function a(){b();alert("new");}, 此时b和a一样, 函数体中直接调用b, 无论从a调用还是从b调用结果都一样, 产生堆栈溢出
另一方面
function a(){ 
alert('old'); 
} 
var b=a; 
var a=function(){ 
b(); 
alert('new'); 
}

编译时: a被定义为alert("old")
运行时: b=function a(){alert("old")}; a=function(){b();alert("new")}; 此时b的函数体中不包括ab中任何一个, a只调用b... 无论怎样都不会产生堆栈溢出...
补充2:
一般来说,都会用第一种的写法来避免代码污染,但如果你需要保留原function,就要用第二种写法,反正两种方法都是符合w3c的。
事实上第一种写法是后来才有的,这种写法是经过优化的。
Javascript 相关文章推荐
jqPlot jquery的页面图表绘制工具
Jul 25 Javascript
input禁止键盘及中文输入,但可以点击
Feb 13 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
Apr 17 Javascript
浅谈JavaScript的计时器对象
Dec 26 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
vue2实现搜索结果中的搜索关键字高亮的代码
Aug 29 Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
Jan 31 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
Oct 31 Javascript
vue引用外部JS的两种种方法
Jan 28 Javascript
node.js如何自定义实现一个EventEmitter
Jul 16 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 #Javascript
jquery 触发a链接点击事件解决方案
May 02 #Javascript
jQuery弹性滑动导航菜单实现思路及代码
May 02 #Javascript
js通过地址栏给action传值(中文乱码全是问号)
May 02 #Javascript
如何使用jQuery来处理图片坏链具体实现步骤
May 02 #Javascript
jQuery仿Excel表格编辑功能的实现代码
May 01 #Javascript
JavaScript 实现类的多种方法实例
May 01 #Javascript
You might like
php正则校验用户名介绍
2008/07/19 PHP
php递归实现无限分类生成下拉列表的函数
2010/08/08 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
一个高效的JavaScript压缩工具下载集合
2007/03/06 Javascript
JavaScript 继承详解(一)
2009/07/13 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
js实现Select列表各项上移和下移的方法
2015/08/14 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
Angular2内置指令NgFor和NgIf详解
2016/08/03 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
Python矩阵常见运算操作实例总结
2017/09/29 Python
python opencv之SURF算法示例
2018/02/24 Python
Python wxPython库消息对话框MessageDialog用法示例
2018/09/03 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
Kipling凯浦林美国官网:世界著名时尚休闲包袋品牌
2016/08/24 全球购物
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
StringBuilder和String的区别
2015/05/18 面试题
幼师专业求职推荐信
2013/11/08 职场文书
前台文员岗位职责
2013/12/28 职场文书
副厂长岗位职责
2014/02/02 职场文书
生产厂长岗位职责
2014/02/21 职场文书
企业党员公开承诺书
2014/03/26 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
小学生一分钟演讲稿
2014/08/26 职场文书
给朋友的赠语
2015/06/23 职场文书
高中英语教学反思范文
2016/03/02 职场文书
Python异常类型以及处理方法汇总
2021/06/05 Python
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
Python采集股票数据并制作可视化柱状图
2022/04/04 Python
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers