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 相关文章推荐
javascript使用activex控件的代码
Jan 27 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
AngularJS快速入门
Apr 02 Javascript
理解jquery事件冒泡
Jan 03 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
Jul 17 Javascript
jQuery选择器之表单元素选择器详解
Sep 19 jQuery
Thinkphp5微信小程序获取用户信息接口的实例详解
Sep 26 Javascript
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
JavaScript 链表定义与使用方法示例
Apr 28 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
搜索引擎技术核心揭密
2006/10/09 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
在Windows系统上安装PHP运行环境文字教程
2010/07/19 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
PHP正则表达式笔记与实例详解
2019/05/09 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
nodejs 使用 js 模块的方法实例详解
2018/12/04 NodeJs
jQuery实现电梯导航模块
2020/12/22 jQuery
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
python实现while循环打印星星的四种形状
2019/11/23 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
泰国王权免税店官方网站:KingPower
2019/03/11 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
领导检查欢迎词
2014/01/14 职场文书
感恩母亲节活动方案
2014/03/04 职场文书
连锁超市项目计划书
2014/09/15 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js
JS实现简单的九宫格抽奖
2022/06/28 Javascript