ES6箭头函数中的this
ES6箭头函数中的this
ES6 开始引入了箭头函数,让代码看起来更简洁了。但是箭头函数传统函数不仅仅是写法上的不同,在this
和arguments
的处理方式也有着很大的区别。
this是局部的
在箭头函数中this
是局部的,它跟其它局部变量的常规处理是一致的。看下面的例子:
1 | function outer (age) { |
这例子中我们函数共有三层嵌套,里面是两层箭头函数,这里我们在最里层箭头函数内部引用了this
和一个局部变量age
。对局局部变量age
的查找规则我们很清楚,先在当前作用域查找,如果没有就去父作用域查找,一直到最顶层(window、global)。在箭头函数中对this
的查找规则和age
是一样的,箭头函数本身并没有一个自己的this
,它要一直往上层找,直到找到this
为止。
同样,对于arguments
的处理也是一样的。需要注意的一点是箭头函数本身是没有arguments
变量的。
注意事项
箭头函数虽然写起来更加简单,但是我们不能不加区分的在任何地方都用箭头函数替代传统函数,特别是在函数内部涉及this
绑定时。看下面的例子:
1 | function sayName(fn) { |
也正是这个原因Koa 1.x中我们可以中间件中使用this
引用到context
,而在Koa 2.x中需要将context
作为参数传到中间件内部。
1 | // koa1.x |
参考
本站采用「署名 4.0 国际」进行许可。