JavaScript箭头函数与普通函数的区别示例详解

 更新时间:2022年10月27日 10:21:27   作者:格斗家不爱在外太空沉思  
这篇文章主要为大家介绍了JavaScript箭头函数与普通函数的区别示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

箭头函数与普通函数的区别

要讨论箭头函数和普通函数的区别,首先来看看两者的基本格式

普通函数和箭头共同点就是圆括号和大括号,圆括号里面一般放置参数,大括号一般放置函数主体,很明显箭头函数不需要写那么长,举个例子,有一个数组,使用map方法为数组的每个元素增加字符

let arr=['昨天','今天','明天']
let newarr=arr.map(function(item){
  return item+='放假'
})
console.log(newarr);

用普通函数阅读起来的话不太友好,使用箭头函数看起来并没有感觉阅读起来很流畅,实际上只有一个参数的时候我们不需要为参数添加上括号,而且只有一个表达式的时候可以步添加大括号,他们的结果是一样的

let newarr1=arr.map((item)=>{return item += '放假'})
let newarr2=arr.map(item =>  item += '放假')

箭头函数的理解

我们并不能为箭头函数命名,箭头函数是函数表达式,而且是匿名的。既然是匿名的我们经常用new来构造函数的实例在箭头函数上是不行的,箭头函数不是构造函数,创建的时候并不会为箭头函数创建Construct方法

在函数的内部有个特殊对象arguments,一个类似数组的对象,但是箭头函数没有自己的arguments对象,匿名函数一般不用参数或者限定参数

箭头函数里的this指向

this的指向一直让很多人头疼,箭头函数被设计出来主要的原因是解决this的问题

为了查看this的指向,分别创建普通函数和箭头函数的表达式,并且为两个按钮注册点击事件,鼠标点击按钮就会执行函数表达式

<button class="pt">普通函数</button>
<p class="ptP"></p>
<button class="jt">箭头函数</button>
<p class="jtP"></p>
<script>
const pt=document.querySelector('.pt')
const ptP=document.querySelector('.ptP')
const jt=document.querySelector('.jt')
const jtP=document.querySelector('.jtP')
let ptFunction=function(){
  ptP.innerHTML='普通函数:'+this
}
let jtFunction=()=>{
  jtP.innerHTML='箭头函数:'+this
}
pt.addEventListener('click',ptFunction,false)
jt.addEventListener('click',jtFunction,false)
</script>

点击第一个按钮的时候,这个this是绑定按钮的,在普通函数里this的值是动态的,定义this的时候这个值不会被马上确认,而是会在执行的时候才确认,所以this值指向按钮对象

点击第二个按钮的时候显示window,也就是说this的值没有动态生成,而是在定义的时候就确认了,第二个按钮绑定的函数是属于window的,this自然指向window,在箭头函数可以避免查找代码时因找this指向的烦恼

为了this的硬绑定我们经常会用到call,apply,bind三种方法,下面例子一个对象里面有两个属性,一个字符串,一个数组和一个方法,方法主要对数组进行map方法的遍历,为每一个元素添加对象的字符串

const arr=document.querySelector('.arr')//p标签
let calendar={
  name:'2022-10-',
  lately:['10-25','10-26','10-27'],
  add:function(){
    this.lately.map(function(item){
      arr.innerHTML+=this.name+item+'<br>'
    })
  }
} 
calendar.add()

第一个指向是正确的,因为这个this是直接在add函数里执行的,但是第二个this指向不是我们想要的,于是使用call,apply或者bind方法就可以解决了

add:function(){
    this.lately.map(function(item){
        arr.innerHTML+=this.name+item+'<br>'
    }.bind(this))
}
calendar.add()

但是用箭头函数就不用那么麻烦,仅仅把map方法里的function改为箭头函数就简单解决了问题,还有箭头函数不能通过call,apply,bind来改变this的值

add:function(){
    this.lately.map(item => arr.innerHTML+=this.name+item+'<br>')
}

总结

以上就是JavaScript箭头函数与普通函数的区别示例详解的详细内容,更多关于JavaScript箭头函数普通函数的资料请关注脚本之家其它相关文章!

相关文章

  • JavaScript Dom实现轮播图原理和实例

    JavaScript Dom实现轮播图原理和实例

    这篇文章主要为大家详细介绍了JavaScript Dom实现轮播图原理和实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-02-02
  • js实现获取焦点后光标在字符串后

    js实现获取焦点后光标在字符串后

    这篇文章主要介绍了js实现获取焦点后光标在字符串后,原理就是获得焦点后重新把自己复制粘帖一下,喜欢的朋友可以看看
    2014-09-09
  • 基于JavaScript实现无缝滚动效果

    基于JavaScript实现无缝滚动效果

    这篇文章主要为大家详细介绍了基于JavaScript实现无缝滚动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Bootstrap每天必学之导航条(二)

    Bootstrap每天必学之导航条(二)

    Bootstrap每天必学之导航条,进一步向大家讲解了导航条养殖,以及导航条中元素的使用方法,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JavaScript era库的使用详解

    JavaScript era库的使用详解

    这篇本文主要给大家介绍了JavaScript era库的使用,使用 ora 这个 JavaScript 库可以在命令行应用程序中提供漂亮的加载状态提示,本文详细介绍如何使用该库,并结合多个例子演示其功能,需要的朋友可以参考下
    2024-02-02
  • 详解tween.js 中文使用指南

    详解tween.js 中文使用指南

    本篇文章主要介绍了详解tween.js 中文使用指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • ajax请求前端跨域问题原因及解决方案

    ajax请求前端跨域问题原因及解决方案

    这篇文章主要为大家介绍了ajax请求前端跨域问题原因及解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-10-10
  • 间隔滚动效果-兼容IE和FireFox

    间隔滚动效果-兼容IE和FireFox

    间隔滚动效果-兼容IE和FireFox...
    2006-12-12
  • JS 实现图片直接下载示例代码

    JS 实现图片直接下载示例代码

    本文为大家详细介绍下使用JS实现图片直接下载,具体实现代码如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-07-07
  • 重构Javascript代码示例(重构前后对比)

    重构Javascript代码示例(重构前后对比)

    回顾头来看看那些Javascript脚本,有写得不太理想,过于复杂。现抽取出来,重构它们,想学习javascript重构的朋友可以参考下啊,网本文可以帮助你的
    2013-01-01

最新评论