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 相关文章推荐
JQuery SELECT单选模拟jQuery.select.js
Nov 12 Javascript
JavaScript中的isXX系列是否继续使用的分析
Apr 16 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
Redis基本知识、安装、部署、配置笔记
Mar 05 Javascript
jQuery+JSON实现AJAX二级联动实例分析
Dec 18 Javascript
基于javascript bootstrap实现生日日期联动选择
Apr 07 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
May 05 Javascript
使用jquery实现的循环连续可停顿滚动实例
Nov 23 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
微信小程序实现banner图轮播效果
Jun 28 Javascript
angular 实现下拉列表组件的示例代码
Mar 09 Javascript
细说Vue组件的服务器端渲染的过程
May 30 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简单封装了一些常用JS操作
2007/02/25 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
js获取网页可见区域、正文以及屏幕分辨率的高度
2014/05/15 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
jQuery 特性操作详解及实例代码
2016/09/29 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
JavaScript实现图片瀑布流和底部刷新
2017/01/02 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
在vue-cli中组件通信的方法
2017/12/16 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
python实现获取客户机上指定文件并传输到服务器的方法
2015/03/16 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
pygame库实现俄罗斯方块小游戏
2019/10/29 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
农民入党思想汇报
2014/01/03 职场文书
党员违纪检讨书
2014/02/18 职场文书
小学生寒假家长评语
2014/04/16 职场文书
庆祝国庆节标语
2014/10/09 职场文书
2015年计算机教学工作总结
2015/07/22 职场文书
家属联谊会致辞
2015/07/31 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Elasticsearch 聚合查询和排序
2022/04/19 Python
python实现简单的三子棋游戏
2022/04/28 Python