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 相关文章推荐
json 定义
Jun 10 Javascript
Javascript 获取链接(url)参数的方法[正则与截取字符串]
Feb 09 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
Dec 29 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
location.hash保存页面状态的技巧
Apr 28 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
基于JQuery的购物车添加删除以及结算功能示例
Mar 08 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
Apr 23 Javascript
Nuxt.js实现校验访问浏览器类型的中间件
Aug 24 Javascript
小程序分享链接onShareAppMessage的具体用法
May 22 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
风味层面去分析咖啡油脂
2021/03/03 咖啡文化
php桌面中心(四) 数据显示
2007/03/11 PHP
ThinkPHP中url隐藏入口文件后接收alipay传值的方法
2014/12/09 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JavaScript prototype属性深入介绍
2012/11/27 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
2013/12/19 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
浅谈JS闭包中的循环绑定处理程序
2014/11/09 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
python3.x实现base64加密和解密
2019/03/28 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
质检部职责
2013/12/28 职场文书
青年文明号复核材料
2014/02/11 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
机电系毕业生求职信
2014/07/11 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
出生证明格式
2015/06/15 职场文书
天气温馨提示语
2015/07/14 职场文书
施工现场安全管理制度
2015/08/05 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python