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 相关文章推荐
Mootools 1.2教程 滑动效果(Slide)
Sep 15 Javascript
Windows8下搭建Node.js开发环境教程
Sep 03 Javascript
原生js仿jquery animate动画效果
Jul 13 Javascript
JS简单实现仿百度控制台输出信息效果
Sep 04 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
微信小程序 视图容器组件的详解及实例代码
Jan 19 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
Nov 14 Javascript
微信小程序实现animation动画
Jan 26 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
jQuery Migrate 插件用法实例详解
May 22 jQuery
如何换个角度使用VUE过滤器详解
Sep 11 Javascript
详解JavaScript作用域 闭包
Jul 29 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
PHP的面试题集,附我的答案和分析(一)
2006/11/19 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
常用的php ADODB使用方法集锦
2008/03/25 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
详解javascript函数的参数
2015/11/10 Javascript
Extjs实现下拉菜单效果
2016/04/01 Javascript
jQuery mobile在页面加载时添加加载中效果 document.ready 和window.onload执行顺序比较
2016/07/14 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
docker中编译nodejs并使用nginx启动
2017/06/23 NodeJs
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
商务英语专业自荐信
2013/10/14 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
大学生职业生涯规划书模板
2014/01/18 职场文书
招股说明书范本
2014/05/06 职场文书
毕业实习计划书
2015/01/16 职场文书
明星邀请函
2015/02/02 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS