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 相关文章推荐
Jquery 基础学习笔记
May 29 Javascript
javascript中的变量是传值还是传址的?
Apr 19 Javascript
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
Jun 24 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
JavaScript弹窗基础篇
Apr 27 Javascript
javascript基础知识
Jun 07 Javascript
JavaScript事件学习小结(一)事件流
Jun 09 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
vue 的点击事件获取当前点击的元素方法
Sep 15 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 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过滤敏感词的示例
2014/03/31 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
javascript图片延迟加载实现方法及思路
2015/12/31 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
vue.js实现刷新当前页面的方法教程
2017/07/05 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
下载糗事百科的内容_python版
2008/12/07 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
django 按时间范围查询数据库实例代码
2018/02/11 Python
python http基本验证方法
2018/12/26 Python
python 图像平移和旋转的实例
2019/01/10 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
通过cmd进入python的实例操作
2019/06/26 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
Python 防止死锁的方法
2020/07/29 Python
Django静态文件加载失败解决方案
2020/08/26 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
加拿大高尔夫超市:Golf Town
2018/01/12 全球购物
揭牌仪式主持词
2014/03/19 职场文书
师范生免费教育协议书范本
2014/10/09 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL