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 相关文章推荐
取得传值的函数
Oct 27 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
Nov 05 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
JavaScript动态修改弹出窗口大小的方法
Apr 06 Javascript
Spring mvc 接收json对象
Dec 10 Javascript
jQuery中的each()详细介绍(推荐)
May 25 Javascript
AngularJS 中的事件详解
Jul 28 Javascript
js移动端图片压缩上传功能
Aug 18 Javascript
详解Ubuntu安装angular-cli遇到的坑
Sep 08 Javascript
vue.js 实现a标签href里添加参数
Nov 12 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 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里得到前天和昨天的日期的代码
2007/08/16 PHP
php的ddos攻击解决方法
2015/01/08 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
jQuery随机切换图片的小例子
2013/04/18 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
js动态创建及移除div的方法
2015/06/03 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
Vue-cli proxyTable 解决开发环境的跨域问题详解
2017/05/18 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
Vue.js实现价格计算器功能
2020/03/30 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
微信小程序项目总结之点赞 删除列表 分享功能
2018/06/25 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
layui树形菜单动态遍历的例子
2019/09/23 Javascript
vue监听键盘事件的相关总结
2021/01/29 Vue.js
[01:08:57]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第二场
2014/05/24 DOTA
Python  连接字符串(join %)
2008/09/06 Python
深入Python解释器理解Python中的字节码
2015/04/01 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Python math库 ln(x)运算的实现及原理
2019/07/17 Python
tensorflow 2.1.0 安装与实战教程(CASIA FACE v5)
2020/06/30 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
python简单实现插入排序实例代码
2020/12/16 Python
使用phonegap进行本地存储的实现方法
2017/03/31 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
药学专业个人自我评价
2013/11/11 职场文书
求职信模板
2014/05/23 职场文书
校园环保标语
2014/06/13 职场文书
工厂仓管员岗位职责范本
2014/07/17 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS