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 相关文章推荐
HTML5附件拖拽上传drop & google.gears实现代码
Apr 28 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
Aug 07 Javascript
js中创建对象的几种方式示例介绍
Jan 26 Javascript
javascript实现动态加载CSS
Jan 26 Javascript
浅谈JavaScript中的作用域和闭包问题
Jul 07 Javascript
ECMAScript6快速入手攻略
Jul 18 Javascript
集合Bootstrap自定义confirm提示效果
Sep 19 Javascript
Express进阶之log4js实用入门指南
Feb 10 Javascript
使用jquery Ajax实现上传附件功能
Oct 23 jQuery
在vue中使用G2图表的示例代码
Mar 19 Javascript
详解vue在项目中使用百度地图
Mar 26 Javascript
js实现网页随机验证码
Oct 19 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
拼音码表的生成
2006/10/09 PHP
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
PDO::getAttribute讲解
2019/01/28 PHP
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
2007/07/21 Javascript
JavaScript打字小游戏代码
2011/12/26 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
Javascript数据结构与算法之列表详解
2015/03/12 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
再谈JavaScript线程
2015/07/10 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
JavaScript中三个等号和两个等号的区别(== 和 ===)浅析
2016/09/22 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
[01:04:20]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.29
2020/12/02 DOTA
python实现的简单FTP上传下载文件实例
2015/06/30 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
Python 确定多项式拟合/回归的阶数实例
2018/12/29 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
终于搞懂了Keras中multiloss的对应关系介绍
2020/06/22 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
香港零食网购:上仓胃子
2020/06/08 全球购物
最新的互联网创业计划书
2014/01/10 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
祖国在我心中演讲稿600字
2014/09/23 职场文书
民主评议党员总结
2014/10/20 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书