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 相关文章推荐
JS控制弹出新页面窗口位置和大小的方法
Mar 02 Javascript
jQuery三级下拉列表导航菜单代码分享
Apr 15 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
Dec 14 Javascript
JQuery学习总结【一】
Dec 01 Javascript
js实现数组和对象的深浅拷贝
Sep 30 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
Vue 动态设置路由参数的案例分析
Apr 24 Javascript
Angular网络请求的封装方法
May 22 Javascript
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
angular2 组件之间通过service互相传递的实例
Sep 30 Javascript
微信小程序实现商城倒计时
Nov 01 Javascript
js判断密码强度的方法
Mar 18 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连接Access数据库的方法小结
2013/06/20 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
vue的props实现子组件随父组件一起变化
2016/10/27 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
JQuery获取可视区尺寸和文档尺寸及制作悬浮菜单示例
2019/05/14 jQuery
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python 如何创建一个线程池
2020/07/28 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
python request 模块详细介绍
2020/11/10 Python
实列教程 一款基于jquery和css3的响应式二级导航菜单
2014/11/13 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
ORACLE十问
2015/04/20 面试题
linux面试题参考答案(5)
2016/11/05 面试题
员工培训心得体会
2013/12/30 职场文书
大学生简短的自我评价分享
2014/02/20 职场文书
节约用水演讲稿
2014/05/21 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
八年级历史教学反思
2016/02/19 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
解析Java异步之call future
2021/06/14 Java/Android
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript