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 相关文章推荐
XHTML-Strict 内允许出现的标签
Dec 11 Javascript
javascript 快速排序函数代码
May 30 Javascript
使用jQuery实现的掷色子游戏动画效果
Mar 14 Javascript
Javascript学习笔记之数组的遍历和 length 属性
Nov 23 Javascript
JS中常用的输出方式(五种)
Jun 12 Javascript
jQuery flip插件实现的翻牌效果示例【附demo源码下载】
Sep 20 Javascript
html中鼠标滚轮事件onmousewheel的处理方法
Nov 11 Javascript
jquery实现刷新随机变化样式特效(tag标签样式)
Feb 03 Javascript
Jquery EasyUI $.Parser
Jun 02 jQuery
深入理解ES6的迭代器与生成器
Aug 19 Javascript
vue axios数据请求get、post方法及实例详解
Sep 11 Javascript
Taro小程序自定义顶部导航栏功能的实现
Dec 17 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获取本周,上周,本月,上月,本季度日期的代码
2009/08/05 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
javascript parseInt 大改造
2009/09/27 Javascript
JSON 编辑器实现代码
2009/12/06 Javascript
js TextArea的选中区域处理
2010/12/28 Javascript
jQuery 获取和设置select下拉框的值实现代码
2013/11/08 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
浅谈addEventListener和attachEvent的区别
2016/07/14 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
Python字符串逐字符或逐词反转方法
2015/05/21 Python
使用Python AIML搭建聊天机器人的方法示例
2018/07/09 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
Python运算符+与+=的方法实例
2021/02/18 Python
英国高端食品和葡萄酒超市:Waitrose
2016/08/23 全球购物
社会实践心得体会
2014/01/03 职场文书
师范生自我鉴定
2014/03/20 职场文书
集中整治工作方案
2014/05/01 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Go语言空白表示符_的实例用法
2021/07/04 Golang
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android
JavaScript的function函数详细介绍
2021/11/20 Javascript
css弧边选项卡的项目实践
2023/05/07 HTML / CSS