函数,顾名思义,只是个函数,不能是构造函数(不能new),不能是Generator函数(不能使用yield)。
语法:
-
一个参数的简单函数
-
没有参数的,需要加()小括号在参数的位置,多个参数,参数要用小括号括起来
多个参数: -
如果函数体只有一条语句,不用{}大括号包含起来的时候,默认是return语句
相当于
如下,我用this定义了a值为0,执行fn1箭头函数的时候,会输出2,此时a被赋值为2;
同样,我定义了一个箭头函数fn2,函数体也是只有一条语句,但是我用{}括起来,但是没有return,执行fn2,输出是undefined,而fn4,普通有return的函数,同fn1执行相同。
-
函数体多于一条语句,要用{}花括号括起来
-
由上可知,{}被解释为一个代码块,所以在箭头函数中如果要返回一个对象,需要用()小括号括起来
这一点,需要以后注意一下,因为目前从控制台输出情况看,没有区别,我还以为会报错................
这种情况的时候报错了 -
如果 函数体只有一行语句,且不需要返回值,可以用下面这种写法
let fn = () => void doNotReturn();
自己在控制台写了一下,其实并不明白为啥有这种写法,如果不要返回值,直接{}不就好了吗.........
使用场合:
- 普通方法声明定义
-
使代码更简洁
-
结合变量结构使用:
-
简化回调函数(map,forEach,then等等)
-
结合rest参数,...扩展运算符使用
- 不可以当作构造函数, 不可以使用new命令,否则会抛出一个错误。
- 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
- 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
-
我觉得最重要的一点:
函数体内的this对象,就是定义函数时所在的对象,而不是函数使用时所在的对象。this关键字真的是一个很奇妙的东西,箭头函数可以固定this关键字的指向,这点很重要。
另一个例子:
this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数。