好吧,看到很多关于箭头函数的网上帖子或者资料,动不动就一上来开始各种语法,简写什么的,稀里糊涂搞了半天不知道是说的是箭头函数呢还是箭头函数表达式。
为啥要区分箭头函数和箭头函数表达式,有必要,就像Javascript里面函数和和函数表达式肯定不是一回事啊!函数本身是一个对象,可以有很多途径生成,而这个函数表达式只是其中一种方法。
(x,y) => x+y
这样的就是一个函数表达式,这个函数表达式只是有点特别:
- 它用了这个“=>”所以也被形象的称之为箭头函数表达式
- 这个表达式生成的函数对象或者函数实例有一些特性,如没有this属性,没有prototype属性等
- 箭头函数表达式其实是一个计算过程,它会生成一个匿名函数出来,然后你把它的引用赋给一个变量:
let arrowFunc = (x,y) => x+y ;
这个arrowFunc就称之为箭头函数,而(x,y) => x+y
是箭头函数表达式,在使用理解上的话对两者肯定也是有差异的:
举个例子:
const withClassName = Component => props => (<Component {...props} className="classA">);
这里面为啥 <Component {...props} className="classA">
要放在一个()
里面?很多人会说这个Componet组件是个对象,根据语法… , 没问题,那么箭头函数本身也是一个函数对象,为啥不把 props => (<Component {...props} className="classA">)
这个整体也放在()
里面呢?对啊,人家是表达式,表达式可以这么任性的写。这时候你要再把它当作一个函数来看那就行不通了。