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 相关文章推荐
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
php读取sqlite数据库入门实例代码
Jun 25 Javascript
判断日期是否能跨月查询的js代码
Jul 25 Javascript
jQuery中ajax的get()方法用法实例
Dec 26 Javascript
Bootstrap精简教程
Nov 27 Javascript
详解JavaScript对象类型
Jun 16 Javascript
Angularjs 制作购物车功能实例代码
Sep 14 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
js常用正则表达式集锦
May 17 Javascript
20多个小事例带你重温ES10新特性(小结)
Sep 29 Javascript
谈一谈vue请求数据放在created好还是mounted里好
Jul 27 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
Oct 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
PHP4和PHP5共存于一系统
2006/11/17 PHP
PHP中动态显示签名和ip原理
2007/03/28 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
php实现简单的语法高亮函数实例分析
2015/04/27 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
PHP制作登录异常ip检测功能的实例代码
2016/11/16 PHP
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
推荐一个封装好的getElementsByClassName方法
2014/12/02 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
Python实现截屏的函数
2015/07/26 Python
Python实现感知机(PLA)算法
2017/12/20 Python
Python多进程并发与多线程并发编程实例总结
2018/02/08 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
提升python处理速度原理及方法实例
2019/12/25 Python
python 如何上传包到pypi
2020/12/24 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
高级文秘工作总结的自我评价
2013/09/28 职场文书
上学迟到的检讨书
2014/01/11 职场文书
民族团结演讲稿范文
2014/08/27 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
学校艾滋病宣传活动总结
2015/05/09 职场文书
二婚主持词
2015/06/30 职场文书
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android