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中绑定事件的命名空间详解
Apr 05 Javascript
js post提交调用方法
Feb 12 Javascript
jQuery菜单插件superfish使用指南
Apr 21 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
js以及jquery实现手风琴效果
Apr 17 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
简单谈谈JS中的正则表达式
Sep 11 Javascript
vue复合组件实现注册表单功能
Nov 06 Javascript
Vue2 配置 Axios api 接口调用文件的方法
Nov 13 Javascript
使用layer弹窗,制作编辑User信息页面的方法
Sep 27 Javascript
基于vue-cli3创建libs库的实现方法
Dec 04 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
防止MySQL注入或HTML表单滥用的PHP程序
2009/01/21 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
yii2.0整合阿里云oss上传单个文件的示例
2017/09/19 PHP
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
再谈javascript原型继承
2014/11/10 Javascript
JavaScript中的数组操作介绍
2014/12/30 Javascript
jQuery插件实现多级联动菜单效果
2015/12/01 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
javascript判断firebug是否开启的方法
2016/11/23 Javascript
基于vue-upload-component封装一个图片上传组件的示例
2018/10/16 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Python3常见函数range()用法详解
2019/12/30 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
新手学python应该下哪个版本
2020/06/11 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
绘画设计学生的个人自我评价
2013/09/20 职场文书
机电一体化大学生求职信
2013/11/08 职场文书
农救科工作职责
2013/11/27 职场文书
秋季开学典礼主持词
2014/03/19 职场文书
大学迎新晚会主持词
2014/03/24 职场文书
民事赔偿协议书
2014/11/02 职场文书
赔偿协议书
2015/01/27 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python