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 相关文章推荐
IE6中使用position导致页面变形的解决方案(js代码)
Jan 09 Javascript
js实现在字符串中提取数字
Nov 05 Javascript
原生javascript实现隔行换色
Jan 04 Javascript
jQuery 遍历函数详解
Jul 05 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
Aug 24 Javascript
基于jQuery实现返回顶部实例代码
Jan 01 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
Jun 13 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
Mar 01 Javascript
详解webpack-dev-server使用方法
Sep 14 Javascript
JS实现的类似微信聊天效果示例
Jan 29 Javascript
js函数和this用法实例分析
Mar 13 Javascript
原生js实现移动小球(碰撞检测)
Dec 17 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
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php的POSIX 函数以及进程测试的深入分析
2013/06/03 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php实现图片缩略图的方法
2016/03/29 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
javascript中DOM复选框选择用法实例
2015/05/14 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
js实现上传图片及时预览
2016/05/07 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
vue.js中mint-ui框架的使用方法
2017/05/12 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
2019/12/06 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
Django 模型类(models.py)的定义详解
2019/07/19 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
YOOX台湾:意大利奢侈品电商
2018/10/13 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
游戏商店:Eneba
2020/04/25 全球购物
戴尔荷兰官方网站:Dell荷兰
2020/10/04 全球购物
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
中学生差生评语
2014/01/30 职场文书
连锁酒店店长职责范本
2014/02/13 职场文书
公司门卫的岗位职责
2014/02/19 职场文书
餐厅总厨求职信
2014/03/04 职场文书
销售代理协议书
2014/09/30 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技