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 相关文章推荐
JQery jstree 大数据量问题解决方法
Mar 09 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
Sep 11 Javascript
javascript-简单的计算器实现步骤分解(附图)
May 30 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
Dec 18 Javascript
JQuery控制Radio选中方法分析
May 29 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
防止重复发送 Ajax 请求
Feb 15 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
Mar 08 Javascript
yarn的使用与升级Node.js的方法详解
Jun 04 Javascript
vue生成随机验证码的示例代码
Sep 29 Javascript
element-ui中按需引入的实现
Dec 25 Javascript
动态规划之使用备忘录来改进Javascript函数
Apr 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
php5 and xml示例
2006/11/22 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
js中判断文本框是否为空的两种方法
2011/07/31 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
js带点自动图片轮播幻灯片特效代码分享
2015/09/07 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
2017/11/15 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python global全局变量函数详解
2018/09/18 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
python中如何设置代码自动提示
2020/07/15 Python
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
英文自我鉴定
2013/12/10 职场文书
超级搞笑检讨书
2014/01/15 职场文书
四风问题查摆材料
2014/08/25 职场文书
优秀家长自荐材料
2014/08/26 职场文书
十佳党员事迹材料
2014/08/28 职场文书
财务人员个人工作总结
2015/02/27 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
解决Redis启动警告问题
2022/02/24 Redis
MySQL GTID复制的具体使用
2022/05/20 MySQL