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 相关文章推荐
提交表单时执行func方法实现代码
Mar 17 Javascript
js匿名函数的调用示例(形式多种多样)
Aug 20 Javascript
jQuery实现美观的多级动画效果菜单代码
Sep 06 Javascript
AngularJs ng-route路由详解及实例代码
Sep 14 Javascript
JavaScript定义函数_动力节点Java学院整理
Jun 27 Javascript
详解angular笔记路由之angular-router
Sep 12 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
Vue.js 动态为img的src赋值方法
Mar 14 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 jQuery
Vue组件通信的几种实现方法
Apr 25 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
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
php操作access数据库的方法详解
2017/02/22 PHP
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
2014/10/30 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
2016/03/08 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
chrome浏览器如何断点调试异步加载的JS
2016/09/05 Javascript
AngularJS Controller作用域
2017/01/09 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
vuex vue简单使用知识点总结
2019/08/29 Javascript
jQuery实现简易QQ聊天框
2020/02/10 jQuery
Python中编写ORM框架的入门指引
2015/04/29 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
一道python走迷宫算法题
2018/01/22 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
django 获取字段最大值,最新的记录操作
2020/08/09 Python
Spy++的使用方法及下载教程
2021/01/29 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
六道php面试题附答案
2014/06/05 面试题
优秀应届毕业生推荐信
2014/02/18 职场文书
挂靠协议书范本
2014/04/22 职场文书
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
交通局领导班子群众路线教育实践活动对照检查材料思想汇报
2014/10/09 职场文书
2014年体育工作总结
2014/11/24 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
中学生自我评价范文
2015/03/03 职场文书
关于车尾的标语大全
2015/08/11 职场文书
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技