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 相关文章推荐
msn上的tab功能Firefox对childNodes处理的一个BUG
Jan 21 Javascript
js或css实现滚动广告的几种方案
Jan 28 Javascript
详解Javascript动态操作CSS
Dec 08 Javascript
jQuery实现菜单感应鼠标滑动动画效果的方法
Feb 28 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
Bootstrap学习系列之使用 Bootstrap Typeahead 组件实现百度下拉效果
Jul 07 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
Aug 24 Javascript
详解VUE的状态控制与延时加载刷新
Mar 27 Javascript
jQury Ajax使用Token验证身份实例代码
Sep 22 Javascript
前端路由&webpack基础配置详解
Jun 10 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 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/06/14 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
详解JavaScript对W3C DOM模版的支持情况
2015/06/16 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
Javascript缓存API
2016/06/14 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
ES5新增数组的实现方法
2020/05/12 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
让python json encode datetime类型
2010/12/28 Python
Python中编写ORM框架的入门指引
2015/04/29 Python
详解Python中break语句的用法
2015/05/14 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
Python decimal模块使用方法详解
2020/06/08 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
职工运动会邀请函
2014/01/19 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
优秀医生事迹材料
2014/02/12 职场文书
市场营销方案范文
2014/03/11 职场文书
实习推荐信
2014/05/10 职场文书
软环境建设心得体会
2014/09/09 职场文书
芙蓉镇观后感
2015/06/10 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python