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 相关文章推荐
解决FireFox下[使用event很麻烦]的问题
Nov 26 Javascript
Javascript 获取LI里的内容
Dec 17 Javascript
DOM下的节点属性和操作小结
May 14 Javascript
Javascript学习笔记之相等符号与严格相等符号
Nov 23 Javascript
jQuery中:button选择器用法实例
Jan 04 Javascript
js控制div弹出层实现方法
May 11 Javascript
jQuery Password Validation密码验证
Dec 30 Javascript
AngularJS实现的JSONP跨域访问数据传输功能详解
Jul 20 Javascript
JS实现将链接生成二维码并转为图片的方法
Mar 17 Javascript
微信小程序时间选择插件使用详解
Dec 28 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
使用webpack将ES6转化ES5的实现方法
Oct 13 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
基于php无限分类的深入理解
2013/06/02 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jquery插件splitScren实现页面分屏切换模板特效
2015/06/16 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python实现一次创建多级目录的方法
2015/05/15 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
python获取代码运行时间的实例代码
2018/06/11 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
介绍一下Python中webbrowser的用法
2013/05/07 面试题
九年级家长会邀请函
2014/01/15 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
长城导游词400字
2015/01/30 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书