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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
JQuery下关于$.Ready()的分析
Dec 13 Javascript
jQuery 添加/移除CSS类实现代码
Feb 11 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
Jan 29 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
Mar 04 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 Javascript
ES6新增数据结构WeakSet的用法详解
Aug 07 Javascript
angular第三方包开发整理(小结)
Apr 19 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
vue自定义指令directive的使用方法
Apr 07 Javascript
JS中封装axios来管控api的2种方式
Sep 11 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如何防止用户重复提交表单
2020/12/09 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
js DataSet数据源处理代码
2010/03/29 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JS简单实现tab切换效果的多窗口显示功能
2016/09/07 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
node.js 发布订阅模式的实例
2017/09/10 Javascript
jQuery简单实现对数组去重及排序操作实例
2017/10/31 jQuery
JavaScript框架Angular和React深度对比
2017/11/20 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
vue-cli3单页构建大型项目方案
2020/04/07 Javascript
Python日志模块logging简介
2015/04/13 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
flask框架中勾子函数的使用详解
2018/08/01 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
Python自省及反射原理实例详解
2020/07/06 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
十岁生日家长答谢词
2014/01/17 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
《赶海》教学反思
2014/04/20 职场文书
学生安全责任书模板
2014/07/25 职场文书
思想作风纪律整顿心得体会
2014/09/04 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书