Javascript中 带名 匿名 箭头函数的重要区别(推荐)


Posted in Javascript onJanuary 29, 2017

带名函数是指函数显示地给出了一个名字的函数,function abs(x){}。匿名函数是指函数只带有function这个关键字,而没有像abs这种函数名称的函数,如function(){}。ES6标准新增了一种新的函数:Arrow Function(箭头函数)箭头函数表面上相当于匿名函数,并且简化了函数定义。它们各自的区别是什么呢?

1 带名和匿名函数的区别

区别:匿名函数需要讲地址赋值给另一个变量let a,然后再用a来调用函数;而带名函数因为显示地给出了函数名称,所以可以直接用这个函数名称调用。

带名函数返回值是函数体内的返回值,如abs(x)函数的返回值是number变量。函数调用时,直接abs(6)调用,这个非常好理解。

function abs(x){
 if(x>=0){
  return x;
 }else{
  return -x;
 }
}

但是匿名函数呢?如下所示,函数未显示地给出一个函数名称,但是此处的abs被赋值为这个匿名函数的地址,所以使用时可以直接用abs(-3),诸如此类的调用。

let abs=function(x){ 
 if(x>=0){
  return x;
 }else{
  return -x;
 }
}

2 箭头函数

ES6标准新增了一种新的函数:Arrow Function(箭头函数)。为什么叫Arrow Function?因为它的定义用的就是一个箭头。箭头函数表面上相当于匿名函数,并且简化了函数定义。

箭头函数有两种格式,一种是只包含一个表达式,连{ … }和return都省略掉了。

x => x * x

上面的箭头函数相当于一个匿名函数“”

function (x) {
 return x * x;
}

还有一种可以包含多条语句,这时候就不能省略{ … }和return:

(x,y) => {
 if (x > 0) {
  return x + y;
 }
 else {
  return -x + y;
 }
}

3 箭头函数和匿名函数的不同

箭头函数看上去是匿名函数的一种简写,但实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,由上下文确定。

调用函数obj1.getAge(2017)和调用obj2.getAge(2017)会得到相同的结果吗?

obj1中fn函数,由于JavaScript函数对this绑定的错误处理,得不到预期的结果,this.birth指向window或undefined。

但是obj2,fn函数是箭头函数,箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj2。

var obj1 = {
 birth: 1990,
 getAge: function (year) { 
  let fn=function(y){
   return y - this.birth; // this指向window或undefined
  }; 
  return fn(year); 
 }
};
var obj2 = {
 birth: 1990,
 getAge: function (year) {
  var fn = (y) => y - this.birth; // this.birth为1990
  return fn(year);
 }
};

4 总结

和带名函数相比,匿名函数需要讲地址赋值给另一个变量let a,然后再用a来调用函数;和匿名函数比,箭头函数完全修复了this的指向,this总是指向词法作用域。

以上所述是小编给大家介绍的Javascript中 带名 匿名 箭头函数的重要区别,希望对大家有所帮助,如果有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
JavaScript网页制作特殊效果用随机数
May 22 Javascript
jQuery 页面 Mask实现代码
Jan 09 Javascript
jQuery下扩展插件和拓展函数的写法(匿名函数使用的典型例子)
Oct 20 Javascript
JavaScript的21条基本知识点
Mar 04 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
May 26 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
Nov 29 Javascript
使用canvas实现一个vue弹幕组件功能
Nov 30 Javascript
jQuery层叠选择器用法实例分析
Jun 28 jQuery
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 Javascript
jQuery图片轮播功能实例代码
Jan 29 #Javascript
jQuery代码实现实时获取时间
Jan 29 #Javascript
用director.js实现前端路由使用实例
Jan 27 #Javascript
详解bootstrap的modal-remote两种加载方式【强化】
Jan 27 #Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 #Javascript
js监听input输入框值的实时变化实例
Jan 26 #Javascript
jquery实现input框获取焦点的简单实例
Jan 26 #Javascript
You might like
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
php xml留言板 xml存储数据的简单例子
2009/08/24 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
2014/08/22 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
jquery仿QQ登录账号选择下拉框效果
2016/03/22 Javascript
JavaScript实现鼠标点击导航栏变色特效
2017/02/08 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
收集的几个Python小技巧分享
2014/11/22 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
python是怎么被发明的
2020/06/15 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
JAVA的事件委托机制和垃圾回收机制
2014/09/07 面试题
工厂厂长的职责
2013/12/12 职场文书
大学生秋游活动方案
2014/02/17 职场文书
优秀员工演讲稿
2014/05/19 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
项目负责人任命书
2014/06/04 职场文书
婚前协议书范本
2014/10/27 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
特此通知格式
2015/04/27 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers
Django框架中视图的用法
2022/06/10 Python