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 相关文章推荐
CSS JavaScript 实现菜单功能 改进版
Dec 09 Javascript
extjs 学习笔记(一) 一些基础知识
Oct 13 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
Nov 09 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
Sep 29 Javascript
关于js中alert弹出窗口文本换行问题简单详细说明
Dec 11 Javascript
jquery实现div阴影效果示例代码
Sep 16 Javascript
Node.js操作mysql数据库增删改查
Mar 30 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Dec 14 Javascript
vue.js移动端app实战1:初始配置详解
Jul 24 Javascript
javascript  删除select中的所有option的实例
Sep 17 Javascript
Javascript原型链及instanceof原理详解
May 25 Javascript
原生小程序封装跑马灯效果
Oct 21 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
建站常用13种PHP开源CMS比较
2009/08/23 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
php创建类并调用的实例方法
2019/09/25 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
nodejs个人博客开发第四步 数据模型
2017/04/12 NodeJs
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
webpack4与babel配合使es6代码可运行于低版本浏览器的方法
2018/10/12 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
零基础写python爬虫之抓取糗事百科代码分享
2014/11/06 Python
python安装以及IDE的配置教程
2015/04/29 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Python爬虫框架Scrapy常用命令总结
2018/07/26 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
英国时尚饰品和发饰购物网站:Claire’s
2017/07/04 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
中学老师的自我评价
2013/11/07 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
2014年行政助理工作总结
2014/11/19 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
世界名著读书笔记
2015/06/25 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书