箭头函数与this
-
在箭头函数内部,
this
指向是静态的 -
箭头函数体内的
this
对象,就是定义该函数时所在的作用域指向的对象,而不是使用时所在的作用域指向的对象。若该箭头函数不在任何函数的内部,``this`指向window,否则指向其之所在作用域 -
不可使用
=>
的情况- 不可以当作构造函数,也就是说,不可以使用
new
命令,否则会抛出一个错误。 - 不可以使用
arguments
对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。 - 不可以使用
yield
命令,因此箭头函数不能用作 Generator 函数。
- 不可以当作构造函数,也就是说,不可以使用
-
适合使用
=>
的情况-
如果你有一个简短的,单语句内联函数表达式,它唯一的语句是某个计算后的值的
return
语句, -
如果你有一个内部函数表达式,它依赖于外围函数的
var self = this
或者.bind(this)
调用来确保正确的this
绑定(也就是使用这种方法将动态this
改变为静态) -
如果你有一个内部函数表达式,它依赖于外围函数的类似于
var args = Array.prototype.slice.call(arguments)
这样的东西来制造一个arguments
的词法拷贝,那么这个内部函数就可能安全地变为一个=>
箭头函数。
-
-
避免使用
=>
的情况
对于其他的所有东西 —— 普通函数声明,较长的多语句函数表达式,需要词法名称标识符进行自引用(递归等)的函数,和任何其他不符合前述性质的函数 —— 你就可能应当避免=>
函数语法。