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 自定义函数写法分享
Mar 30 Javascript
node.js中的fs.writeSync方法使用说明
Dec 15 Javascript
Javascript中call和apply函数的比较和使用实例
Feb 03 Javascript
Bootstrap树形控件使用方法详解
Jan 27 Javascript
jquery单击事件和双击事件冲突解决方案
Mar 02 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
Apr 19 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
Oct 20 Javascript
基于vue如何发布一个npm包的方法步骤
May 15 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
vue实现淘宝购物车功能
Apr 20 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
May 14 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
Sep 21 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模板引擎Smarty中的保留变量用法分析
2016/04/11 PHP
php socket通信简单实现
2016/11/18 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
javascript globalStorage类代码
2009/06/04 Javascript
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
JSON 数据格式详解
2017/09/13 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
2017/12/19 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
深入浅析javascript函数中with
2018/10/28 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
2020/01/02 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
自我鉴定范文200字
2013/10/02 职场文书
优质的学校老师推荐信
2013/10/28 职场文书
爱情检讨书大全
2014/01/21 职场文书
家长建议怎么写
2014/05/15 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
校友回访母校寄语
2015/02/26 职场文书
2015大学生暑假调查报告
2015/07/13 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
高中班主任寄语
2019/06/21 职场文书