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中的bind绑定事件与文本框改变事件的临时解决方法
Aug 13 Javascript
判断滚动条到底部的JS代码
Nov 04 Javascript
解决Jquery鼠标经过不停滑动的问题
Mar 03 Javascript
jquery实现的V字形显示效果代码
Oct 27 Javascript
JavaScript+canvas实现七色板效果实例
Feb 18 Javascript
RequireJS使用注意细节
May 15 Javascript
浅谈JS中String()与 .toString()的区别
Oct 20 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
Dec 27 Javascript
JSON键值对序列化和反序列化解析
Jan 24 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
你或许不知道的一些npm实用技巧
Jul 04 Javascript
微信小程序APP的生命周期及页面的生命周期
Apr 19 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引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
Laravel手动分页实现方法详解
2016/10/09 PHP
php实现登陆模块功能示例
2016/10/20 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
Javascript 汉字字节判断
2009/08/01 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
通过实例了解Render Props回调地狱解决方案
2020/11/04 Javascript
python中实现定制类的特殊方法总结
2014/09/28 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
django定期执行任务(实例讲解)
2017/11/03 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
2019/06/19 Python
Web前端页面跳转并取到值
2017/04/24 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
cf搞笑广告词
2014/03/14 职场文书
银行进社区活动总结
2014/07/07 职场文书
四风问题查摆材料
2014/08/25 职场文书
关于工作时间玩手机的检讨书
2014/09/18 职场文书
2015公务员年度考核评语
2015/03/25 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python
MySQL系列之九 mysql查询缓存及索引
2021/07/02 MySQL