Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式


Posted in Javascript onJune 24, 2014

函数声明

function foo() {}

函数 foo 将会在整个程序执行前被 hoist (提升),因此它在定义 foo 函数的整个 scope (作用域)中都是可用的。即使在函数定义之前调用它也没问题。

foo(); // Works because foo was created before this code runs
function foo() {}

因为我打算专门写篇介绍作用域的文章,所以这里就不详述了。

函数表达式

对于函数声明,函数的名称是必须的,而对于函数表达式而言则是可选的,因此,就出现了匿名函数表达式和命名函数表达式。如下:

函数声明: function functionName (){  }
函数声明: function functionName[可选](){  }
那么我就知道,如果没有函数名的话,一定就是函数表达式,但是对于有函数名的情况该如何判断呢?
Javascript 规定如果整个函数体是作为表达式的一部分时,那么它就是函数表达式,否则即是函数声明。以下为表达式:

var fuc = foo(){}

我们再举几个极端的表达式例子:

!function foo(){}
true && function foo(){}

以上的语句这里只是为了区分函数表达式,一般不会这样写。那么用一个对比的例子来看看效果:

foo1();//foo1 is not defined 
foo2();//works because foo2 was created before this code runs
!function foo1() {
  alert('foo1 works');
};
function foo2() {
  alert('foo2 works');
};

匿名函数表达式

var foo = function() {};

上面的例子将一个匿名函数赋值给了变量 foo。

foo; // 'undefined'
foo(); // this raises a TypeError
var foo = function() {};

由于 var 是一个声明所以这里对变量 foo 进行 hoist (提升),因此当程序执行时,变量 foo 是可调用的。
但是由于赋值语句只有在运行时才生效,所以变量 foo 的值为 undefined。

命名函数表达式

另一个要讲到的就是命名函数的赋值。

var foo = function bar() {
  bar(); // Works
};
bar(); // ReferenceError

在这里,命名函数 bar 赋值给了变量 foo,所以在函数声明外是不可见的,但在 bar 函数内部仍然可以调用。这是因为 Javascript 对命名函数处理的机制,函数的名称永远在函数内部的作用域中有效。

Javascript 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
动态修改DOM 里面的 id 属性的弊端分析
Sep 03 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
JavaScript 继承详解(三)
Jul 13 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
Dec 29 Javascript
AngularJs  Understanding Angular Templates
Sep 02 Javascript
Angularjs的Controller间通信机制实例分析
Nov 07 Javascript
jQuery列表检索功能实现代码
Jul 17 jQuery
angular4强制刷新视图的方法
Oct 09 Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 Javascript
Javascript学习笔记之 对象篇(四) : for in 循环
Jun 24 #Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
Jun 24 #Javascript
js实现div闪烁原理及实现代码
Jun 24 #Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
Jun 24 #Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 #Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
Jun 23 #Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 #Javascript
You might like
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
Prototype Number对象 学习
2009/07/19 Javascript
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
让mayfish支持mysqli数据库驱动的实现方法
2010/05/22 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
AngularJS中的Directive实现延迟加载
2016/01/25 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python机器学习库常用汇总
2017/11/15 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
python基于ID3思想的决策树
2018/01/03 Python
python 连接各类主流数据库的实例代码
2018/01/30 Python
Python学习笔记之open()函数打开文件路径报错问题
2018/04/28 Python
css3 transform属性详解
2014/09/30 HTML / CSS
html5弹跳球示例代码
2013/07/23 HTML / CSS
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
业务代表的岗位职责
2013/11/16 职场文书
社区活动邀请函范文
2014/01/29 职场文书
搞笑爱情保证书
2014/04/29 职场文书
小学语文业务学习材料
2014/06/02 职场文书
公务员政审个人总结
2015/02/12 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
承诺书范本大全
2015/05/04 职场文书
百万英镑观后感
2015/06/09 职场文书
python实现剪贴板的操作
2021/07/01 Python