JS两种定义方式的区别、内部原理


Posted in Javascript onNovember 21, 2013

相信两种方式大家都用过,但未必所有人都知道其 区别,内部原理。

// 方式1 
function func1(x,y){ 
// your code 
} 
// 方式2 
var func2 = function(x,y){ 
// your code 
}

方式1 是典型的函数声明(Function declarations)。
方式2 是函数表达式(Function expressions),将一个匿名函数赋值给一个变量。或者说方式2中创建了一个具有形参为x,y的匿名函数,然后把该匿名函数赋值给变量func2。

其主要区别在于:
1, 函数声明需显示的指定函数名,这里是func1;函数表达式则使用匿名函数
2, 方式1在代码执行之前(解释期)被加载到作用域中,方式2则需在代码执行时(运行期)加载

一个简单示例就明白了它们在使用上的区别

alert(func1); // --> func1源码 
alert(func2); // --> undefined 
// 方式1 
function func1(x,y){ 
// your code 
} 
// 方式2 
var func2 = function(x,y){ 
// your code 
}

可以看到,第一次弹出的是func1的源码,第二次却是undefined。即采用方式1(函数声明)定义函数,可以在该函数代码之上使用它,采用方式2(函数表达式)定义函数则不能在其定义前使用,只能在其定义后使用。

其内部涉及到 执行上下文(Execution context)及 激活对象(Activation object)。想更深了解的请阅读EcmaScript 5文档。

最近发现越来越多的人喜欢使用方式2定义函数,尤其在嵌套函数中。如单纯的定义一个函数个人还是习惯方式1。

Javascript 相关文章推荐
javascript之学会吝啬 精简代码
Apr 25 Javascript
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
Aug 30 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
JS实现控制表格单元格垂直对齐的方法
Mar 30 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
May 25 Javascript
浅谈JS运算符&&和|| 及其优先级
Aug 10 Javascript
js实现不提示直接关闭网页窗口
Mar 30 Javascript
详解angularJS自定义指令间的相互交互
Jul 05 Javascript
js中关于Blob对象的介绍与使用
Nov 29 Javascript
vue实现打地鼠小游戏
Aug 21 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 Javascript
jQuery操作input值的各种方法总结
Nov 21 #Javascript
jqgrid 表格数据导出实例
Nov 21 #Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 #Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
Nov 21 #Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 #Javascript
js 实现菜单上下显示附效果图
Nov 21 #Javascript
javascript 数组排序函数sort和reverse使用介绍
Nov 21 #Javascript
You might like
php中文本操作的类
2007/03/17 PHP
php 数学运算验证码实现代码
2009/10/11 PHP
php的一个简单加密解密代码
2014/01/14 PHP
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
accesskey 提交
2006/06/26 Javascript
alixixi runcode.asp的代码不错的应用
2007/08/08 Javascript
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
JS取数字小数点后两位或n位的简单方法
2016/10/24 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
python实用代码片段收集贴
2015/06/03 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
python如何进入交互模式
2020/07/06 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
opencv实现图像平移效果
2021/03/24 Python
尊师重教演讲稿
2014/09/04 职场文书
法院授权委托书格式
2014/09/28 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
使用Ajax实现进度条的绘制
2022/04/07 Javascript