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 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
javascript 基础篇4 window对象,DOM
Mar 14 Javascript
js 窗口抖动示例
Sep 04 Javascript
使用js判断TextBox控件值改变然后出发事件
Mar 07 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
Jan 18 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
May 31 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
vue的传参方式汇总和router使用技巧
May 22 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
Dec 07 Javascript
详解JavaScript中的Object.is()与"==="运算符总结
Jun 17 Javascript
JavaScript parseInt0.0000005打印5原理解析
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安装问题
2006/10/09 PHP
IP138 IP地址查询小偷实现代码
2010/02/15 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
扩展String功能方法
2006/09/22 Javascript
用jscript实现列出安装的软件列表
2007/06/18 Javascript
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
python实现2014火车票查询代码分享
2014/01/10 Python
Python常用的日期时间处理方法示例
2015/02/08 Python
Django+Celery实现动态配置定时任务的方法示例
2020/05/26 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
CSS3 实用技巧:实现黑白图像效果示例代码
2013/07/11 HTML / CSS
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
英国在线照明超市:Castlegate Lights
2019/10/30 全球购物
校运会加油稿大全
2015/07/22 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书