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 相关文章推荐
Ucren Virtual Desktop V2.0
Nov 07 Javascript
Jquery实现简单的动画效果代码
Mar 18 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
jquery根据锚点offset值实现动画切换
Sep 11 Javascript
简介JavaScript中的italics()方法的使用
Jun 08 Javascript
js电话号码验证方法
Sep 28 Javascript
Bootstrap所支持的表单控件实例详解
May 16 Javascript
异步加载JS、CSS代码(推荐)
Jun 15 Javascript
Vue.js实现实例搜索应用功能详细代码
Aug 24 Javascript
在iFrame子页面里实现模态框的方法
Aug 17 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
May 27 Javascript
JavaScript WeakMap使用详解
Feb 05 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新手上路(十)
2006/10/09 PHP
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
用js+xml自动生成表格的东西
2006/12/21 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
juery框架写的弹窗效果适合新手
2013/11/27 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
JavaScript构建自己的对象示例
2016/11/29 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
Python  连接字符串(join %)
2008/09/06 Python
python操作xml文件示例
2014/04/07 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Python:合并两个numpy矩阵的实现
2019/12/02 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
培训班主持词
2014/03/28 职场文书
新闻报道策划方案
2014/06/11 职场文书
拾金不昧表扬信
2015/01/16 职场文书
学校节水倡议书
2015/04/29 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL