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 相关文章推荐
JScript的条件编译
May 29 Javascript
javascript 面向对象编程基础:继承
Aug 21 Javascript
JavaScript对象和字串之间的转换实例探讨
Apr 21 Javascript
Javascript的无new构建实例详解
May 15 Javascript
javascript insertAfter()定义与用法示例
Jul 25 Javascript
使用JS实现图片展示瀑布流效果的实例代码
Sep 12 Javascript
纯原生js实现贪吃蛇游戏
Apr 16 Javascript
js+html5实现页面可刷新的倒计时效果
Jul 15 Javascript
javascript数组定义的几种方法
Oct 06 Javascript
vue踩坑记录之数组定义和赋值问题
Mar 20 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
Nov 25 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 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.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
javascript将数字转换整数金额大写的方法
2015/01/27 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
webpack-dev-server自动更新页面方法
2018/02/22 Javascript
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
node.js通过url读取文件
2020/10/16 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
python操作CouchDB的方法
2014/10/08 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
用python 批量更改图像尺寸到统一大小的方法
2018/03/31 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Pandas时间序列:重采样及频率转换方式
2019/12/26 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
Python连接Hadoop数据中遇到的各种坑(汇总)
2020/04/14 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
浅谈Python中文件夹和python package包的区别
2020/06/01 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
数百万免费的图形资源:Freepik
2020/09/21 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
教师工作决心书
2015/02/04 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书