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最常用与实用的创建类的代码
Aug 12 Javascript
javascript中select下拉框的用法总结
Jan 07 Javascript
Bootstrap基本样式学习笔记之表格(2)
Dec 07 Javascript
浅谈javascript的闭包
Jan 23 Javascript
js实现5秒倒计时重新发送短信功能
Feb 05 Javascript
Vue制作Todo List网页
Apr 26 Javascript
在vue中使用css modules替代scroped的方法
Mar 10 Javascript
jQuery创建及操作xml格式数据示例
May 26 jQuery
React 全自动数据表格组件——BodeGrid的实现思路
Jun 12 Javascript
javascript中的相等操作符(==与===区别)
Dec 21 Javascript
Angular8 简单表单验证的实现示例
Jun 03 Javascript
Taro小程序自定义顶部导航栏功能的实现
Dec 17 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
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
利用PHP实现一个简单的用户登记表示例
2017/04/25 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
JS变量及其作用域
2017/03/29 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
ng-alain表单使用方式详解
2018/07/10 Javascript
PHP实现基于Redis的MessageQueue队列封装操作示例
2019/02/02 Javascript
layUI实现列表查询功能
2019/07/27 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
以一段代码为实例快速入门Python2.7
2015/03/31 Python
最近Python有点火? 给你7个学习它的理由!
2017/06/26 Python
python爬虫获取淘宝天猫商品详细参数
2020/06/23 Python
Python处理CSV与List的转换方法
2018/04/19 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Python中如何添加自定义模块
2020/06/09 Python
python 实现两个npy档案合并
2020/07/01 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
HTML5的download属性详细介绍和使用实例
2014/04/23 HTML / CSS
工地标语大全
2014/06/18 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
课内比教学心得体会
2014/09/09 职场文书
服务行业标语口号
2015/12/26 职场文书
高中物理教学反思
2016/02/19 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
我们认为中短波广播场强仪的最佳组合
2022/04/05 无线电