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 相关文章推荐
非主流的textarea自增长实现js代码
Dec 20 Javascript
深入浅出分析javaScript中this用法
May 09 Javascript
javascript中数组和字符串的方法对比
Jul 20 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
Aug 01 Javascript
js倒计时简单实现代码
Aug 11 Javascript
EasyUI创建对话框的两种方式
Aug 23 Javascript
JS实现双击内容变为可编辑状态
Mar 03 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
May 20 jQuery
完美解决手机网页中输入框被输入法遮挡的问题
Dec 19 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 Javascript
JS实现字符串去重及数组去重的方法示例
Apr 21 Javascript
angular异步验证器防抖实例详解
Mar 31 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
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
在laravel中实现ORM模型使用第二个数据库设置
2019/10/24 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
python安装以及IDE的配置教程
2015/04/29 Python
Python学习入门之区块链详解
2017/07/25 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Python实现查找二叉搜索树第k大的节点功能示例
2019/01/24 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python爬虫请求头设置代码
2020/07/28 Python
python从Oracle读取数据生成图表
2020/10/14 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
技术入股合作协议书
2014/10/07 职场文书
作风转变年心得体会
2014/10/22 职场文书
如何写好开幕词?
2019/06/24 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL