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 相关文章推荐
JS获取IUSR_机器名和IWAM_机器名帐号的密码
Dec 06 Javascript
Javascript之旅 对象的原型链之由来
Aug 25 Javascript
iframe子页面获取父页面元素的方法
Nov 05 Javascript
节点的插入之append()和appendTo()的用法介绍
Jan 13 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
Jun 19 Javascript
jQuery实现限制文本框的输入长度
Jan 11 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
简述vue状态管理模式之vuex
Aug 29 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 Javascript
websocket4.0+typescript 实现热更新的方法
Aug 14 Javascript
详细分析vue响应式原理
Jun 22 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
海贼王:最美的悬赏令!
2020/03/02 日漫
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
php实现当前页面点击下载文件的简单方法
2016/09/22 PHP
JavaScript学习笔记(十)
2010/01/17 Javascript
js遍历td tr等html元素
2012/12/13 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
jQuery实现向下滑出的二级菜单效果实例
2015/08/22 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
2015/09/01 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
Python实现的一个简单LRU cache
2014/09/26 Python
Python网站验证码识别
2016/01/25 Python
Python中单、双下划线的区别总结
2017/12/01 Python
EM算法的python实现的方法步骤
2018/01/02 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
python学生信息管理系统
2018/03/13 Python
python使用生成器实现可迭代对象
2018/03/20 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Pycharm修改python路径过程图解
2020/05/22 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
忠诚奉献演讲稿
2014/09/12 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
2016新年致辞
2015/08/01 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
小学教师教学反思
2016/02/24 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
新手必备Python开发环境搭建教程
2021/05/28 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技